第二阶段的复习是以教材,属于扫地雷式复习。其中只摘录笔者不熟悉的地方。
以下内容参见《c/c++程序设计教程》,黄永峰、孙甲松编著,清华大学出版社
第15章 运算符重载
15.1 运算符重载的一般方法
- 一般格式:函数类型 operator 运算符名称(形参列表)
- {对运算符的重载操作语句}
- 相当于operator 运算符是一个函数
- c++不支持重载的运算符:
- 成员访问运算符——"."
- 成员指针访问运算符——"*"
- 域运算符——"::"
- 长度运算符——"sizeof"
- 条件运算符——"?:"
15.2 运算符重载函数作为类的成员函数或友元函数
- 成员函数隐含了一个操作数,声明为友元会更加直观
- 赋值运算符、下标运算符、函数调用运算符必须为类的成员函数;流插入运算符、类型转换运算符等只能定义友元函数。
15.2.3 流插入运算符和流提取运算符的重载
- istream & operator >>(istream &, 自定义类 &)
- ostream & operator <<(ostream &, 自定义类 &)
- 运算符重载使用引用的重要性:地址传递而非值传递,不生成临时变量,减少了程序执行的时间和开销。
第16章 继承与派生
16.2 派生类的声明
16.2.2 派生类的遗传和变异
- 构造函数和析构函数是不能从基类继承的。
16.3 派生类成员的访问属性与继承方式
基类成员访问方式 | 继承访问控制 | 在派生类中的访问控制 |
---|---|---|
public | public | public |
protected | public | protected |
private | public | 不可访问 |
public | protected | protected |
protected | protected | protected |
private | protected | 不可访问 |
public | private | private |
protected | private | private |
private | private | 不可访问 |
16.3.4 使用using声明来改变基类成员在派生类中的访问属性
- 基类中的private成员不能在派生类中任何地方用using声明
- 基类中public/protected成员可以在派生类中任意地方将访问属性改成public,protected或private
16.4 派生类的构造函数和析构函数
16.4.1 单继承的派生类构造函数
- 构造函数的传递过程:实参按顺序传递给派生类构造函数的形参,在由派生类构造函数将前面三个实参传递给基类构造函数相应的形参。
16.4.2 内嵌子对象的派生类的构造函数
- 内嵌子对象的派生类的构造函数的初始化包含三部分:
- 积累数据成员初始化
- 子对象数据成员初始化
- 派生类新增数据成员初始化
- 对应的执行顺序:
- 通过调用基类构造函数来对积累数据成员初始化
- 通过调用子对象构造函数来对子对象数据成员初始化
- 通过执行派生类构造函数来对派生类新增数据成员初始化
16.4.5 派生类的析构函数
- 执行派生类自己的析构函数,对派生类新增加的成员进行清理
- 调用子对象的析构函数,对子对象进行清理
- 调用基类的析构函数,对基类进行清理
16.5 多重继承与虚基类
//注意多重继承和多级派生的区别。一个是有很多爸爸,一个是有很多代。
16.5.1 多重派生类构造函数的定义方法
- 调用基类构造函数的顺序是按照声明派生类时基类出现的顺序。
16.5.3 虚基类
- 虚基类是什么?所谓虚基类机制是指c++语言提供virtual base class方法,使得在继承相同间接基类时只保留一份成员,即同名成员在内存中只有一份拷贝。
- 虚基类实在声明派生类时声明的,而不是基类
- 在最后的派生类中,不仅要对直接基类进行初始化,还要对虚基类初始化。如果没有用到虚基类机制,只需要对直接基类进行初始化。在执行最后的派生类的构造函数的时候,只执行其对虚基类的调用,而忽略其他派生类对虚基类构造函数的调用,以确保虚基类只初始化一次。
现在学的东西,考完试就会忘掉。也许会在很久之后真正实操的时候,才会想起来,噢,其实我在大一的时候学过,其实我在很懵懂的时候掌握过。可是意识到了又如何?还是要回过头来复习。这样的学习过程,真的把我花费的时间和精力充分利用起来了么?