码迷,mamicode.com
首页 > 其他好文 > 详细

虚拟继承中子类和父类的构造函数顺序1

时间:2016-06-14 01:07:13      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

这里的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();
}

  

虚拟继承中子类和父类的构造函数顺序1

标签:

原文地址:http://www.cnblogs.com/vhyc/p/5582450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!