- 掌握编写新的简单类(教学示例)
- 掌握继承和重载机制
- 实现多态性
准备工作:练习1(以及相关的课程概念)
绘制以下三个类的UML图(仅在纸上绘制):
- 拥有一个private的double类型字段X
- 一个返回X的GetX函数
- 一个修改X的SetX函数
- 一个允许初始化X的构造函数
- 一个显示X的Affiche函数,显示文本"Un.X = "
继承自Un,额外拥有:
- 一个private的double类型字段Y
- 一个返回Y的GetY函数
- 一个修改Y的SetY函数
- 一个允许初始化X和Y的构造函数
- 一个显示X和Y的Affiche函数,显示文本"Deux. (X, Y) = "
继承自Deux,额外拥有:
- 一个private的double类型字段Z
- 一个返回Z的GetZ函数
- 一个修改Z的SetZ函数
- 一个允许初始化X、Y和Z的构造函数
- 一个显示X、Y和Z的Affiche函数,显示文本"Trois.(X, Y, Z)="
3-a Deux类型的对象能否直接访问字段X?为什么?
3-b 当创建Trois类型的对象时,会执行多少个构造函数?构造函数的执行顺序是什么?您是如何找到执行的构造函数和顺序的?
3-c 当Trois类型的对象被销毁时,析构函数的执行顺序是什么?您是如何找到这个顺序的?
3-d 从Trois对象出发,如何执行Deux类的Affiche函数?如何执行Un类的Affiche函数?
创建一个Trois类型的指针并将其分配给一个Trois对象的空间。即:
Trois *_pt = new Trois(1, 2, 3);
_pt->Affiche(); // 用于以下问题
delete _pt; // 不要忘记!!!!4-a 构造函数的数量和执行顺序有变化吗?
4-b 析构函数呢?
4-c 调用的Affiche函数是否是最适合的(显示的值的数量相对于内存中值的数量)?
创建一个Un类型的指针并将其分配给一个Trois对象的空间。即:
Un *_pt = new Trois(1, 2, 3); // 确实如此
_pt->Affiche(); // 用于以下问题
delete _pt; // 不要忘记!!!!5-a 构造函数的数量和执行顺序有变化吗?
5-b 析构函数呢?
5-c 调用的Affiche函数是否是最适合的?
5-d 在Affiche函数的声明前加上virtual关键字。现在指令_pt->Affiche()调用的是哪个Affiche函数?
5-e 在Un、Deux和Trois类的析构函数声明前加上virtual关键字。使用虚析构函数时,以下指令使用的析构函数的数量和顺序是什么?
delete _pt;5-f 找到在层次结构中使用最高类型指针的应用。
创建一个Un类型的引用并将其分配给一个Trois对象的空间。即:
Trois tr(5, 4, 3);
Un &_ref = tr;
_ref.Affiche(); // 用于以下问题