C++基础问题求教
- C/C++ code
#include <iostream>using namespace std;class Base { public: Base(int i) { cout << "Base" << i << endl; } ~Base () { }};class Base1: virtual public Base { public: Base1(int i, int j=0) : Base(j) { cout << "Base1" << i << endl; } ~Base1() {}};class Base2: virtual public Base { public: Base2(int i, int j=0) : Base(j) { cout << "Base2" << i << endl; } ~Base2() {}};class Derived : public Base2, public Base1 { public: Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c), Base2(d), Base(a) { cout << b; } private: Base2 mem2; Base1 mem1;};void main() { Derived objD (1, 2, 3, 4); }
输出为什么是14302012,请给出具体流程。谢谢
[解决办法]
Base1
Base24
Base13
Base0
Base22
Base0
Base11
2
以上为输出结果,代码只定义了一个对象Derived objD,步骤如下:
1、执行构造函数,子类的构造函数执行之前,会先调用基类的构造函数,可以得到最开始调用的为Base构造函数,输出为“Base1”,而后调用Base2和Base1构造函数,先后顺序应该和代码中“class Derived : public Base2, public Base1 ”谁先前面相关。输出为“Base24”和“Base13”。我
2、调用完基类构造函数,开始初始化成员变量mem2和mem1,初始化顺序和定义顺序相关。每个变量初始化之前,先调用基类构造函数,得到输出结果:
Base0
Base22
Base0
Base11
3、最后进入了类的构造函数,执行代码{ cout << b; },输出2。
编译器VS2010,Win7环境。对了,基类的析构函数一般为virtual。