C++基类、派生类的初始化
2016-08-25 15:10
344 查看
C++基类、派生类的初始化
class base { // ... } class derived : public base { // ... } ///////////////////////////////////////////////////////////// derived A;
执行
derived A时, 推测 基类和派生类的构造顺序如下:
在编译时分别确定好base及derived中vtbl(虚函数表)中的vptr(虚函数表指针)指向;
执行base类中的构造函数,此时derived没有生成,base中仍使用编译时base生成的vtbl;
执行derived类的构造函数,derived中使用编译时生成的derived中的vtbl,base生成的vtbl不再使用;
派生类初始化完成。
在base类初始化过程中,并没有derived类的信息,所以只能用自己scope中的虚函数来执行类的构造函数。由此也可以解释Effective C++中Item9(Never call virtual functions during construction or destruction)中的情况了,同时Item 9中也指出:
During base class construction, virtual functions never go down into derived classes. Instead, the object behaves as if it were of the base type.
在析构时情况也类似。
相关文章推荐
- 关于c++中派生类构造函数初始化基类的记录
- C++ 基类构造函数带参数的继承方式及派生类的初始化
- 【C++】派生类对象初始化基类的引用
- C++ 基类构造函数带参数的继承方式及派生类的初始化
- C++基类、派生类构造函数调用顺序
- C++基类和派生类
- C++中三种不同的继承方式(public、protected、private)的基类特性和派生类特性
- C++中的基类与派生类
- C++基类调用派生类的方法
- 派生类不能在成员初始化列表中直接初始化基类的成员
- 理解C++基类与派生类
- C++中基类对象安全转换为派生类对象的方法
- c++ 基类、派生类都使用了动态内存分配的实例
- C++中基类,派生类 类成员对象的构造函数,析构函数的顺序
- 派生类初始化基类成员时的特殊问题
- C++学习笔记(5)——基类、派生类的构造函数、析构函数的调用顺序
- [C++ rudiment]基类和派生类的构造函数
- C++ 基类调用派生类非虚函数
- C++基类,派生类,同名覆盖原则
- 派生类到基类的转换(c++学习笔记)