C++学习笔记(更新)
C++学习笔记
第1章到第4章 简介、基本数据类型及运算、分⽀、循环
第5章 函数
第6章 数组
第7章 指针和C字符串
第8章 递归
第9章 对象和类
isalpha 函数第10章 对象和类的更多内容
第11章 继承和多态
第12章 ⽂件输⼊输出
第13章 运算符重载
第14章 异常处理
第15章 模板
第1章到第4章
不同于C, C++可以⽤cin >>从键盘读⼊,⽤cout <<;输出到控制台。
<<;与>>表⽰数据流向,并以空格分割数据
cin >> x1 >> x2 >> x3;
两种省略std::前缀的⽅法 :
using namespace std;
using std::cout;
using std::cin;
using std::endl;
命名空间的作⽤:
解决命名冲突的问题
标识符的要求:
1、包含字母、数字、下划线的字符序列;
2、不能以数字开头;
3、不能使⽤保留字做标识符;
4、理论上可以⽆穷长,但具体的编译器会有限制,最好在31位以内,以保证程序的可移植性。标识符⼤⼩写敏感
注意:
不要使⽤以下划线开头的标识符,以免混淆。原因是C++编译器可能为⼀些内部实体使⽤这类名字变量的声明与初始化:
应尽量将变量的声明和初始化放在⼀条语句中。
另⼀种完成变量声明同时初始化的语法:
int i(1), j(1); <=> int i=1, j=1;
常量⽤const关键字声明,⼀个常量必须在⼀条语句中声明并初始化
C++提供的基本数据类型有:
数型、字符、布尔值
数据类型占⽤内存空间的⼤⼩可能是变化的,具体于计算机和编译器。
⼀般:
short 16位
int 32位
long 32位
float 32位
double 64位
long double 80位
使⽤sizeof()确定⼀个类型占⽤空间的⼤⼩:sizeof(long)
数型分整型和浮点型:
整型有:short、int、long,每种有signed和unsighed两种情况
浮点型有:float、double、long double
操作数类型的隐式转换规则:
1、有long double,转long double;
2、有double,转double;
3、有float,转float;
4、有unsigned long,转unsigned long;
5、有long,转long;
6、有unsigned int,转unsigned int;
7、有int,转int。
*⼿⼯类型转换:
static_cast<type>(value);
int i =0;int j =(long)i;// C风格的类型转换
类型扩展:由较⼩值域转向较⼤值域
类型收缩:与类型扩展相反
类型转换并不能改变被转换变量的值
char类型占⽤的空间⼤⼩是1字节
转意字符:
字符含义
\b退格
\t制表
\n换⾏
\f换页
\r回车
\\反斜线
\'单引号
字符含义
\"双引号
C++把char型按⼀个字节⼤⼩的整型处理,也就是说,int是char与其他数型之间的“转换中枢”。
<ctime>中的time(0)函数获取从格林威治标准时间1970.1.1.00:00:00⾄今的秒数
对于bool型,C++内部使⽤1代表true,使⽤0代表false。
可以将数值赋予bool型变量,零值得到false,⾮零值得到true。
&&和||具有短路功能
// 像这样的编码风格是更好的:
bool even = number %2==0;
// 它等价下⾯的语句:
if(number %2==0)
even =true;
else
even =false;
在cstdlib中有rand()和srand()两个函数,前者⽤于⽣成⼀个正整数。若不改变默认的seed,则每次rand()的结果都相同。<iomanip>头⽂件中的流格式控制符:
函数作⽤
set(width)指定打印字段的宽度
setprecision(n)设置浮点数的精度,n为数字总位数,⼀直持续到下⼀个setprecision(n)` fixed不以科学记数法⽅式输出,⼩数部分位数默认为6
showpoint将⼀个浮点数以带⼩数点、带结尾0的形式输出,即使它没有⼩数部分left左对齐
right右对齐
setprecision⽤于fixed之后时,n代表⼩数位数
showpoint与setprecision⼀起使⽤
cout <<setprecision(6);
cout <<1.23<< endl;
cout << showpoint <<1.23<< endl;
cout << showpoint <<123.0<< endl;
⽤enum声明枚举类型:
例⼦:
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATERDAY, SUNDAY } ;
枚举类型定义的是枚举值列表,每个值是标识符⽽⾮字符串
enum Day {...} day = MONDAY;
枚举类型值不能重复声明
枚举值在内存中以整数形式存储,默认是0、1、2、3、4…
可以指定枚举值的整数值:
enum Color {RED =20, GREEN =30, BLUE =40};
如果只部分的为枚举值赋予整型值,则其他枚举值对应的整型值将被默认为前⼀个值的后继
可以将枚举值赋予到⼀个整型变量
可以在枚举值之间进⾏⽐较,这实际上是进⾏对应的整型值的⽐较
哨兵值:使⽤⼀个特殊的值控制循环
不要在循环继续条件中使⽤浮点值的相等性判定,因为计算机中的浮点值只是近似值,这种近似会导致不准确的记数值和结果
类ofstream、ifstream在<fstream>中定义
向⼀个⽂件写⼊数据:
ofstream output;
output.open("");
output <<95<<" "<<56<<" "<<34<< endl;
output.close();
从⼀个⽂件读取数据:
ifstream input;
input.open("");
input >> score1;
input >> score2;
input >> score3;
input.close();
使⽤input对象的eof()函数检测⽂件尾。
为了正确读取数据,应当知道数据是如何保存的
第5章函数
void函数不需要return,但可以⽤“return;”结束该函数
当调⽤⼀个函数时,该函数的参数与变量会被保存在位于内存的⼀个栈中。
引⽤变量:使形参成为原变量的⼀个引⽤,两个变量引⽤同⼀个值:
int count =2;
int& refCount = count;
cout <<"count is "<< count << endl;
cout <<"refCount is "<< refCount << endl;//输出都是2
C++编译器根据函数签名(function_signature = function_name + parameter_list)对函数进⾏重载
C++编译器总是使⽤更精确匹配的函数,如有max(int, int)与max(double, double),则对于表达式max(1, 2.3)将调⽤第⼆个函数。function prototype:没有函数实现的单纯函数声明。在调⽤⼀个函数之前,必须在程序中声明它。
C++允许为函数参数制定默认值,该变量应置于parameter list的末尾:
void printArea(int a,double radius =1){}
头⽂件中不能包含主函数。
cstdlib中的数学函数:
abs()、rand()、srand()
cmath中的数学函数:
ceil()、floor()、exp()、pow(x,y)、log()、log10()、sqrt()、sin()、cos()、tan()、fmod(x,y)
fmod 返回x/y旳余数,如 fmod(2.4,1.3) = 1.1
inline function 不会被调⽤,⽽是直接被编译器复制到相应的调⽤点上,所以可以避免函数调⽤的开销:
inline void f(int month,int year){
cout <<"month is "<< month << endl;
cout <<"year is "<< year << endl;
}
C++允许编译器对于过长的函数忽略关键字 inline,具体由编译器决定。
第6章数组
数组声明及初始化:
double myList[4]={1.9,2.9,3.4,3.5};//此时数组⼤⼩可以省略不写
数组⼤⼩必须是常量。数组仅声明不初始化时值不定。
可以在函数的数组参数前加上关键字 const,告知编译器数组是不允许修改的:
void p(const int list[],int arraySize){
/** Do something **/;
}
int main(){
int numbers[5]={1,4,3,6,8};
p(numbers,5);
return0;
}
如果 f1 中定义了⼀个 const 参数,这个参数⼜被传给了 f2,那么应该将 f2 中的参数也声明为 const:
void f2(const int list[],int size){
/** Do something **/
}
void f1(const int list[],int size){
/** Do something with f2(list,size) **/
}
选择排序算法:每次循环都将未排序部分的最⼤元素置于最后或最前。
插⼊排序算法:反复地将⼀个新元素插⼊到⼀个已排序的⼦列表中。
⼆维数组的列是必须要指明的
第7章指针和C字符串
常量指针:声明与初始化必须在同⼀条语句中
// pValue中的值不可改变,但 *pValue 中的值可以改变
double*const pValue =&value;
注意与下⾯语句的区别
const double* pValue =&value;
返回指针的函数:
int*reverse(int const* list,const int size);
动态内存分配:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论