Chinaunix首页 | 论坛 | 博客
  • 博客访问: 374375
  • 博文数量: 68
  • 博客积分: 5157
  • 博客等级: 大校
  • 技术积分: 1560
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-20 10:05
文章分类

全部博文(68)

文章存档

2013年(1)

2012年(2)

2011年(11)

2010年(9)

2009年(22)

2008年(23)

我的朋友

分类: C/C++

2010-04-08 12:00:43

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,就会有二义性问题
阅读(1717) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~