c++ 初始化顺序
Posted 略加思索的河马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 初始化顺序相关的知识,希望对你有一定的参考价值。
class Base { public: Base(int i) { cout << i; } ~Base() { } }; class Base1: virtual public Base { public: Base1(int i, int j=0) : Base(j) { cout << i; } ~Base1(){} }; class Base2: virtual public Base { public: Base2(int i, int j=0) : Base(j) { cout << i; } ~Base2(){} }; class Derived : public Base2, public Base1 { public: Derived(int a, int b, int c, int d) : mem1(1), mem2(2), Base1(3), Base2(4),Base(1) { cout << b; } private: Base2 mem2; Base1 mem1; }; int main(int argc, char **argv) { Derived objD (1, 2, 3, 4); getchar(); return 0; }
- 首先,任何虚拟基类的构造函数按照它们被继承的顺序构造;
- 其次,任何非虚拟基类的构造函数按照它们被继承的顺序构造;
- 最后,任何成员对象的构造函数按照它们声明的顺序调用;
以上是关于c++ 初始化顺序的主要内容,如果未能解决你的问题,请参考以下文章