C++中的虚基类

我们知道类具有三大特性:封装、继承和多态。继承,可以在现有类的功能上进一步扩展,而无需在构建新的类。但有时多重继承会使结构变得复杂,不注意的话还会引起二义性。其中比较典型的一个案例:

class A
{  public: int a; };
class B: public A
{};
class C: public A
{};
class D: public B, public C
{};
那么此时如果我们声明一个D类的对象:

int main()
{
    D d;
    d.a = 0;    //错误,无法区分是从B还是C继承来的a
    d.B::a = 0; //正确
    d.C::a = 0; //正确
}
因此,很容易出现混淆和错误。然而如果我们设定类A为虚基类,则就不用再去区分是从哪条路径继承来的a值了。即:

class A
{  public: int a; };
class B: virtual public A  // A是B的虚基类
{};
class C: virtual public A  // A是C的虚基类
{};
class D: public B, public C
{};
此时就可以直接调用 d.a= 0;了。

C++提供虚基类的方法,使得在继承间接共同基类是只保留一份成员。(C++程序设计)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值