文章目录
一、派生类构造函数与基类构造函数
派生类的构造函数做了如下事情:
- 创建基类对象
- 派生类构造函数通过成员初始化列表将基类信息传递给基类构造函数
- 派生类构造函数初始化派生类新增的数据成员
二、创建与销毁派生类对象时,构造函数和析构函数的调用
创建派生类对象时
-
程序调用基类构造函数
-
初始化继承的数据成员
-
使用初始化器列表语法指明要使用的基类构造函数
Derived::Derived(type1 x, type2 y):Base(x,y) //初始化列表 { ... }
-
若无初始化器列表语法,则使用默认的基类构造函数
-
-
程序调用派生类构造函数
- 初始化新增的数据成员
销毁派生类对象时
- 程序调用派生类的析构函数
- 程序调用基类的析构函数
三、派生类和基类之间的特殊关系
-
基类指针可在不进行显式转换的情况下指向派生类对象
基类引用可在不进行显式转换的情况下引用派生类对象
基类指针或引用只能调用基类方法,不能调用派生类方法
Derived derived; Base *basePointer = &derived; Base &baseReference = derived;
一般要求引用和指针类型与赋给的类型相匹配,这一规则对继承来说是例外。
然而此例外是单向的,即不可以将基类对象和地址赋给派生类引用和指针。
Base base; //Derived *derived = &base; Not Allowed //Derived &derived = base; Not Allowed
-
派生类对象可以使用基类的方法,条件是此方法不是私有的
class Base{ private: int number; void privateMethod(){ } public: void publicMethod