第二阶段的复习是以教材,属于扫地雷式复习。其中只摘录笔者不熟悉的地方。
以下内容参见《c/c++程序设计教程》,黄永峰、孙甲松编著,清华大学出版社
第17章 多态性与虚函数
17.2 多态性与虚函数
17.2.1 多态性概念及类型
- 多态性是指程序向不同对象发送同一个消息(调用同名函数),而这些不同对象在接受到同意消息时会产生不同行为(实现不同功能)
- 虚函数的作用是允许在派生类中重新定义与基类同名的函数并且可以通过基类指针变量或引用来访问基类和派生类中的同名函数
17.2.2 虚函数
- 函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同
- 这时指向基类的指针就可以调用派生类的同名函数辣
- 以下情况不能声明虚函数:
- 静态成员函数:因为它是属于某个类的,派生之后也不能变呀
- 内联函数:因为它在编译的时候就已经进行代码展开了,不能变了
- 构造函数:调用构造函数的时候,对象还没有生成
- 在程序运行时把虚函数和类对象绑定在一起的过程被称为动态关联
- 由于动态关联是在编译后的运行阶段进行的,因此也成为滞后关联
- 虚函数与函数重载的区别?
- 重载函数:参数不同,名字相同,类型可以不同,函数操作取决于参数;虚函数:参数相同,名字相同,类型相同,函数操作取决于类(的层次)
- 重载函数可以是一般函数、成员函数、友元函数;虚函数只能是成员函数
- 重载函数——静态关联;虚函数——动态关联
17.2.3 虚析构函数
- 为什么建议将析构函数定义为虚函数?
- 否则,如果要delete一个指向基类的指针,它只会撤销基类的部分。这样,可以保证在撤销动态分配空间时能得到正确的处理。
17.2.4 多重继承中的虚函数
- 为了实现多重继承中虚函数的传递性,在派生时,需要采用public继承方式,否则无法实现虚函数特性。(为什么呢?)
- 多重继承中,需要采用虚基类继承关系。(为什么呢?)
17.3 纯虚函数与抽象类
17.3.1 纯虚函数的概念
- 纯虚函数是指没有函数体的虚函数
- 声明方式:virtual 函数类型 函数名(参数列表)=0;
- 纯虚函数没有函数体
17.3.2 抽象类
- 凡是包含纯虚函数的类都是抽象类
- 作用:作为一个类族的共同基类/为一个类族提供一个公共接口
- 如果在派生类中没有对所有纯虚函数进行定义,则此派生类仍然是抽象类
第18章 输入输出流
18.1 c++的输入和输出流类
18.1.1 c++输入输出的类别和特点
- 3种类别
- 系统标准设备的输入和输出(标准I/O)
- 磁盘文件的输入和输出(文件I/O)
- 内存中指定的空间进行输入和输出(字串I/O)
- 特点:
- 类型安全性
- 可扩展性(重载)
18.1.2 c++输入输出流和流类
- 到底什么叫“流”?——c++的输入输出“流”是指由若干字节组成的字节序列。这些字节中的数据按顺序从一个对象传送到令一对象
- 外延:信息的字节序列从源端到目的端的流动过程
- 内涵:内存中为每一个数据流开辟一个内存缓冲区,流是与内存缓冲区相对应的
18.2 标准的输出流输入流
18.2.1 标准输出流
18.2.1.1 标准输出流对象
- cout流对象:console output
- cerr流对象:标准错误流
- clog流对象:console log,标准错误流
- cout与cerr有什么区别?cout流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件;cerr流中的信息只能在显示器输出,不能被重新定向。
- cerr与clog有什么区别?cerr不经过缓冲区,直接向显示器输出有关信息;clog中的信息先存放在缓冲区,然后输出。
18.2.1.2 格式输出
- 使用格式符控制输出格式
- 通过流对象的成员函数控制输出格式
- 常用的一些:
流成员函数 | 控制符 | 作用 |
precision(n) | setprecision(n) | 设置实数精度n位 |
width(n) | setw(n) | 设置字段宽度n位 |
fill(c) | setfill(c) | 设置填充字符c |
setf() | setiosflags() | 设置输出格式状态 |
unsetf() | resetiosflags() | 终止已设置的输出格式状态 |
(比较有趣的一点是,格式状态是枚举类。当多个置为1的时候,会有优先级。其实在这里似乎是做了一个或运算,从头到尾看哪个是1就用哪个,这就是所谓的优先级)
18.2.1.3 其他输出成员函数
- 如cout.put('a'),可以显示一个字符。
18.2.2 标准输入流
18.2.2.2 istream类流对象中成员函数
- cin.get() 无参数:返回读入的字符;
- cin.get(char ch) 一个参数:将读取的字符赋给ch
- cin.get(字符数组,字符个数n,终止字符) 多个参数:读n-1个字符,赋给字符数组,遇到终止字符则提前终止。
- cin.getline(char * a,int n, char c) 与多个参数的cin.get类似。
- cin.ignore(int n,char c) 忽略n个,直到遇见c。作用:清除内容,消除对下次的影响。
yysy,我感觉复习程设的过程还挺开心的。
我能够感觉到编程那种严谨的美。我没有疲乏。我觉得有趣。
虽然,路漫漫。
所以,暑假除了玩耍,是应该全面提升一下自己的编程水平了。