C++虚继承

/*
===============================================
* 文件名称:虚继承.cpp
* 创 建 者: mf
* 创建日期:2024年04月09日
* 描述:
    此文件旨在演示C++中的虚继承(Virtual Inheritance)概念及其意义。虚继承主要用于解决多继承中的菱形继承问题,避免了同一基类在派生类中被多次继承导致的数据冗余和二义性问题。

    在本例中,类D通过虚继承分别继承了类B和类C,而类B和类C均虚继承自类A。这意味着尽管类D间接通过两条路径继承了类A,但在类D的实例中只会有一个类A的子对象。

    注意:此处并未涉及虚函数,虚继承和虚函数是两个不同的概念。虚函数用于实现动态多态性,而虚继承则是解决菱形继承问题。
================================================*/

#include <iostream>
#include <string.h> // 注意:在C++中,通常使用<iostream>而非<string.h>,除非确实需要C风格字符串处理函数
using namespace std;

// 基类A,包含一个公共成员变量a
class A
{
public:
    int a = 1; // 类A的成员变量a,初始值为1
};

// 类B虚继承自类A,添加了成员变量b
class B : virtual public A
{
public:
    int b = 2; // 类B的成员变量b,初始值为2
};

// 类C也虚继承自类A,添加了成员变量c
class C : virtual public A
{
public:
    int c = 3; // 类C的成员变量c,初始值为3
};

// 类D同时继承了类B和类C,由于B和C都是虚继承A,所以在类D中只包含一个类A的实例
class D : public B, public C
{
public:
    int d = 4; // 类D的成员变量d,初始值为4
};

// 主函数,创建一个D类对象并访问基类A的成员变量a
int main(int argc, char *argv[])
{
    D d; // 创建D类对象d

    // 因为类D通过虚继承得到了类A的成员,可以直接访问a
    cout << "d.a=" << d.a << endl; // 输出:d.a=1

    return 0;
}

 

关于虚继承的意义:

  • 在菱形继承结构中,通过虚继承确保了基类A在派生类D中只有一份拷贝,节省了内存空间。
  • 虚继承解决了菱形继承可能导致的二义性问题,使得派生类能够唯一无歧义地访问基类A的成员。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值