C++语言构造函数继承问题
子类的构造函数
1)隐式构造基类子对象
2)显示构造基类子对象
3)构造顺序:首先按照继承表的顺序,依次调用各个基类的构造函数,初始化子类对象中的基类子对象;其次按照声明的顺序,依次调用各个类类型成员变量相应类型的构造函数,初始化子类对象中的成员子对象;最后执行子对象构造函数中的代码。所有的子对象按照被构造的顺序,地址依次升高。// A 公共基类(爷)
// / \
// B C 中间子类(爹)
// \ /
// D 汇集子类(孙)#include <iostream>
using namespace std;
class A {
public:
A (int data) : m_data (data) {
cout << "A构造:" << this << endl;
}
int m_data;
};
class B : virtual public A {
public:
B (int data) : A (1234) {
cout << "B构造:" << this << endl;
}
void set (int data) {
m_data = data;
}
};
class C : virtual public A {
public:
C (int data) : A (5678) {
cout << "C构造:" << this << endl;
}
int get (void) const {
return m_data;
}
};
class D : public B, public C {
public:
D (int data) : B (data), C (data),
A (data) {
cout << "D构造:" << this << endl;
}
};
int main (void) {
D d (100);
d.set (200);
cout << d.get () << endl; // ?
cout << sizeof (d) << endl;
return 0;
}