第二章 从C到C++
2.1main函数
1.C++中需要写int main()不能只是main()
2.main()函数里面最后有一个return 0;
3.main()被启动代码调用,而启动代码是编译器添加到程序中的,是程序和操作系统的桥梁。
4.C++中main()中的括号空着与void是等效的,都代表不接受参数,在C中是不等效的,括号中空着没有参数代表对是否接受参数保存沉默。
2.2 预处理和iostream文件
1.#include
2.include文件也叫头文件,因为一般包含再文件的开头位置。
2.3名字空间
1.可以消除因重名而导致的命名冲突。
2.域解析操作符
3.using声明只对名字空间某一项起作用。
4.using namespace可以声明全部项
2.4输入输出
1.cin代表标准输入,cout代表标准输出,cerr代表标准出错,其中cout是带缓冲的,cerr不带缓冲,但两者都是打印到屏幕。
2.cin会自动忽略空格,但是char也会忽略空格,以eof结束。
3.操纵符的使用,除了setw外,其他操纵符一旦使用将永久改变输入输出的状态,直到下一个操纵符对其进行改变。
2.5文件
1.必须包含头文件fstream,cin用ifstream代替,cout用ofstream代替。例如定义ifstream infile,可以使用file.open来打开指定的文件。
2.文件使用结束后记得关闭文件,file.close来关闭文件。
3.可以测试文件的打开状态if (infile)
2.6常见特性
1.强制类型转换:static_cast,const_cast,dynamic_cast,reinterpret_cast
2.常数 const
3.数据类型bool:所有的关系操作符、相等操作符和逻辑操纵符都产生bool类型的结果值,而不是int类型。整数和指针表达式在需要的时候也可以产生bool类型的结果。比如cin << val; if (val){};操纵符boolalpha可以用来输出ture或false,反之可用noboolalpha来输出0或1。
4.枚举类型enum,主要用途是定义常量
5.定义变量:C++中可以在使用变量前进行声明和定义。
6.结构:C++中可以不用struct,同时可以包含数据成员、函数的实体等。
2.7string类型
1.无需处理null结束符,由系统自动处理,与c语言不一样。
2.转换c语言风格的字符串用函数c_str()
3.getline
4.可以使用+或+=来进行字符串的拼接
5.修改字符串使用erase,插入字符串可以使用insert,替换字符串用replace,调换两个字符串可以使用swap,提取子串用substr,查找子串用find,字符串比较用操作符即可,比如==,!=,>=,<=
2.8函数
1.函数原型:
- C++中原型是必需的,没有参数的函数可以为空的参数列表,不用指明关键字void,而且返回类型必须指定。
2.引用:
- 用&来标记,用来提供存储器的别名;
- 除了不需要进行提取操作外,引用操作符和指针类似;
- 引用调用可以将实际实参传递给函数;
- 引用返回可以实现返回值不需要拷贝到临时存储空间,调用者可以直接访问返回值,同时这样的函数调用可以用在赋值语句左边,因为这样的方式返回的是实际单元.
3.内联函数:
- Inline出现在函数声明而不是函数定义的部分
- 编译器会将内联的函数的那部分实现代码直接替换主函数中调用的函数
- 内联函数跟宏有点类似,但是不完全一样,宏只是简单的文本替换,内联函数是需要编译器考虑语义。
4.函数默认参数
- C++中允许调用函数时不提供参数的情况下采用默认值,这个默认值在函数声明中有赋初值。
- 函数声明中没有默认值的参数放在前面,有默认值的参数放在后面,不然会出错。
5.函数重载
- 通常用来针对有相似行为而数据类型不同的操作提供一个通用的名称,这样用户就不需要考虑具体的函数参数的数据类型,直接使用即可,类似printf函数。
- 函数名可以一样,但是参数个数和类型需要有所区别,具体的匹配过程不需要考虑。
6.函数签名
- C++要求重载的函数需要具有不同的签名,每个函数必须用于独一无二的签名
- 不同的函数签名体现在函数名不同、函数名相同但参数个数、顺序、数据类型不同
- 函数的返回值类型不能用来区分不同的函数签名
2.9new和delete操作符
1.C++里面的new和delete跟C语言的malloc和free类似,但是C++中的new和delete不是库函数而是内建的操作符,并且是关键字。
2.int_ptr =new int; delelte int_ptr;或者int_ptr = new int[50]; delete[] int_ptr
3.不用把new和delete与malloc和free函数混合使用。
2.10例外处理
1.例外是由运行时错误导致的异常情况,比如索引越界或者new请求失败等。
2.抛出例外是在例外发生后,然后可以通过catch这个例外捕捉器来进行处理。
3.例外和不同捕捉器之间的匹配是通过类型判定来进行的。
4.catch程序块可以包含一个参数或者因为特定类型的例外而直接输入catch程序块中。
5.try程序块、catch程序块、trow机制。
2.11补充材料
1.无名名字空间:类似C语言中的static,可以使得一个顶层函数不能再定义该函数的文件外访问。只有与无名名字空间里面的函数在同一个文件才可以调用。
2.无名联合
3.成员选择符:—>,*