c++学习:虚继承

虚继承是C++中处理菱形继承问题的方法,通过保证共享基类的单例实例,减少资源浪费和数据不一致。但需注意初始化、内存布局及设计复杂性的增加。
摘要由CSDN通过智能技术生成

虚继承是C++中一种特殊的继承方式,主要用来解决多重继承中的菱形继承问题。在菱形继承结构中,一 个类继承自两个具有共同基类的类时,会导致共同基类的成员在派生类中存在两份拷贝,这不仅会导致 资源浪费,还可能引起数据不一致的问题。虚继承通过确保共同基类的单一实例存在于继承层次中,来解决这一问题

菱形问题

class Base {
public:
    int data;
};
class Derived1 : public Base {
    // 继承自 Base
};
class Derived2 : public Base {
    // 继承自 Base
};
class FinalDerived : public Derived1, public Derived2 {
    // 继承自 Derived1 和 Derived2
};

FinalDerived 类通过 Derived1 和 Derived2 间接地继承自 Base 类两次。因此, 它包含了两份 Base 的成员拷贝

使用虚继承解决菱形问题

class Base {
public:
    int data;
};
class Derived1 : virtual public Base {
    // 虚继承 Base
};
class Derived2 : virtual public Base {
    // 虚继承 Base
};
class FinalDerived : public Derived1, public Derived2 {
    // 继承自 Derived1 和 Derived2
};

通过将 Derived1 和 Derived2 对 Base 的继承声明为虚继承( virtual public Base ), FinalDerived 类中只会有一份 Base 类的成员。无论通过 Derived1 还是 Derived2 的路径,访问 的都是同一个 Base 类的成员

注意

  • 初始化虚基类:在使用虚继承时,虚基类(如上例中的 Base 类)只能由最派生的类(如 FinalDerived )初始化。
  • 内存布局:虚继承可能会改变类的内存布局,通常会增加额外的开销,比如虚基类指针。
  • 设计考虑:虚继承应谨慎使用,因为它增加了复杂性。在实际应用中,如果可以通过其他设计(如 组合或接口)避免菱形继承,那通常是更好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值