您的位置:首页 > 其它

继承产生两义性的问题

2015-03-15 15:54 120 查看
#include <iostream>
using namespace std;

class A
{
public:
	A(){cout<<"A构造函数执行中"<<endl;}
	~A(){cout<<"A析构函数执行中"<<endl;}
	void print(void){cout<<"基类print函数执行"<<endl;} 

};

class B:virtual public A
{
public:
	B(){cout<<"B构造函数执行中"<<endl;}
	~B(){cout<<"B构造函数执行中"<<endl;}

};

class C:virtual public A
{
public:
	C(){cout<<"C构造函数执行中"<<endl;}
	~C(){cout<<"C构造函数执行中"<<endl;}

};

class D: public B,public C
{
public:
	D(){cout<<"D构造函数执行中"<<endl;}
	~D(){cout<<"D构造函数执行中"<<endl;}
};

int main (void)
{
	D d;
	d.print(); 
	//产生两义性,不知道是从B还是C继承的printf函数。
	//继承的时候使用虚基类不会产生两义性.

	return 0;
}
/*
2015年3月15日15:53:40
程序执行结果如下:
A构造函数执行中
B构造函数执行中
C构造函数执行中
D构造函数执行中
基类print函数执行
D构造函数执行中
C构造函数执行中
B构造函数执行中
A析构函数执行中
请按任意键继续. . .
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: