标签:
这里的inter1,2,3.要写base2的构造函数
final也写,否则里面的数据未初始化
inert2写的原因是假如有人使用直接使用inert2,里面数据就可以初始化了
总结一下,虚拟继承的基类就像一个指针一样差不多,但又有分别,因为弄了 private会使用不了数据。
以后每个要实现的类都要调用虚拟基类的构造函数,如上面的inter2.
写上我个人测试代码
class A{ protected://不能写private int a; public: A(int x) :a(x){} }; class B:virtual public A { public: B(int x) :A(x){} }; class C :virtual public A { public: C(int x) :A(x){} void display() { cout << a << endl;//这个A的数据可以在这里使用 } }; class D :public B, public C { private: int d; public: D(int x, int y) :B(x), C(x), d(y),A(x){}//这个A(x)一定要写 void display() { cout << a << endl << d << endl; } }; int main() { C c(1); c.display(); D d(1, 2); d.display(); }
标签:
原文地址:http://www.cnblogs.com/vhyc/p/5582450.html