C++支持多继承,给我们带来方便的同时,也带来了使用上的困惑,如:
class A
{
A() {printf("A\n");}
};
class AA : public A
{
AA() {printf("AA\n");}
};
class AB : public A
{
AB() {printf("AB\n");}
};
class C : public AB,AA
{
C() {printf("C\n");}
}
这种情况下,创建C的对象,会导致基类A的构造函数被重复调用。
解决办法:使用虚基类
典型的需要用虚基类的情况如下:
A
/ \
B C
\ /
D
其中D继承自BC,BC分别继承自A,所以A要分别被BC虚拟继承
程序嘛…………
class A {
public:
void printA() {cout<<"this is A\n";}
};
class B:virtual public A;
class C:virtual public A;
class D:public B,public C;
这样在D构造出来后,它的存储区域中只有一个A,不会有二义性问题
比如:D d=new D;
此时若使用D.printA();不会有问题;但若B和C不是虚继承自A,就会有二义性问题
阅读(1712) | 评论(0) | 转发(0) |