#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析构函数执行中
请按任意键继续. . .
*/
继承产生两义性的问题
最新推荐文章于 2018-04-16 09:53:35 发布