补充:类的封装性:类外无法直接修改私有元素的性质
1. 继承与派生的区别
- 继承:保持已有类的特性构造新类
- 派生:在已有类的基础上新增特性
2. 基类/派生类概念
基类:被继承的已有类派生类:派生出的新类直接基类与间接基类:
- 直接基类:直接参与派生出某类的基类
- 间接基类:基类的基类甚至更高层的基类
3. 派生类
(1)派生类成员:派生类在基类以外新增的成员
(2)派生类不能继承基类的构造函数和析构函数
(3)同名隐藏:如果派生类声明了和基类成员同名的新成员,派生类的新成员就隐藏了外层同名成员
4. 类型兼容规则
(1)类型兼容规则:在需要基类对象的任何地方,都可以用公有的派生对象来替代,反之则禁止。替
代后,派生类的对象可以作为基类的对象使用,但只能使用从基类继承来的成员。
(2)类型转换(兼容)的情况:
a. 派生类的对象可以隐含转换为基类对象:用派生类对象中基类继承来的成员,逐个赋值给基类对象的
成员。
b. 派生类的对象可以初始化基类的引用
c. 派生类的指针可以隐含转化为基类的指针(这些情况下,调用能使用从基类继承的成员)
5. 派生类的构造函数
(1)强调:基类的构造函数和析构函数不可被继承;派生类成员初始化时所有新/旧成员都初始化
(2)派生类对很多基类成员不可直接访问,因此要完成基类成员对象的初始化;在定义派生类是只需
要对新增成员初始化,继承来的对象自动调用基类的构造函数
(3)派生类构造函数在初始化列表中可调用基类的构造函数,这时必须声明派生类的构造函数。
(4)构造函数的执行顺序:多继承时按照继承语句从左到右调用
6. 派生类的析构函数
(1)强调:不可继承
(2)析构函数调用顺序与构造函数完全相反
7. 虚基类
(1)虚基类的思想
将多个子类的共同基类设置为虚基类,这时从不同路径继承过来的同名数据成员在内存中就只有一个副本,同一个函数名也只有一个映射。
(2)虚基类的作用
a. 主要用来解决多继承时可能发生的对同一基类继承多次而产生的二义性问题
b. 为最远的派生类提供唯一的基类成员,而不重复产生多次拷贝
(3)虚基类的设置时机
第一级继承时就要将父类设置成虚基类
(4)最(远)派生类
建立对象时所指定的类
(5)虚基类成员的初始化
虚基类的成员是由最派生类的构造函数通过调用虚基类的构造函数进行初始化的
(6)在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化表中
给出对虚基类构造函数的调用。如未列出自动调用默认构造函数
(7)在建立对象时,只有最派生类的构造函数调用虚基类的构造函数,该派生类的其他基类对虚基类
的构造函数调用被忽略