virtual继承, 虚基类

父类:  
class   CParent  
{  
....  
};  
继承类的声明比较特别:  
class   CChild   :   virtual   public   CParent  
{  
....  
}  
请问,这个"virtual"是什么作用及含义?  
---------------------------------------------------------------  

表示虚拟继承,和普通继承是C++的两种多重继承方式。  
例如CB1、CB2   继承CA   而CC多重继承CB1、CB2  
如果普通继承则CC包含两份CA的拷贝,分别来自于CB1、CB2  
而虚拟继承则指包含一份CA的拷贝  


---------------------------------------------------------------  

这个"virtual"是什么作用及含义?  
证明这个CParent是CChild   的虚基类  
虚基类   的   作用  
虚基类是指:class   SubClass   :   virtual   public   BaseClass   中以virtual声明的基类!!由于C++支持多重继承,所以对于一个派生类中有几个直接父类,而几个直接父类中有几个可能分别继承自某一个基类(就是 父类的父类),这样在构造最终派生类时,会出现最终派生类中含有多个同一个基类的情况,就会产生二义性的问题(不知道该调用哪个基类的成员变量和函数), 为解决此问题,需要使用虚基类,即只对此基类生成一块内存区域,这样最终派生类中就只会含有一个基类了  
典型的需要用虚基类的情况如下:  
                        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,就会有二义性问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值