C++ 虚基类

虚基类(Virtual Base Class)在面向对象编程中的作用是解决多重继承中的菱形继承问题(Diamond Inheritance Problem)和共享基类问题(Shared Base Class Problem)。

菱形继承问题是指当一个类以多种路径继承自同一个基类时,会导致该基类在派生类中存在多个实例,造成冗余和二义性。虚基类通过在派生类中使用虚继承来解决菱形继承问题。虚基类允许在派生类中共享同一个基类实例,从而消除了冗余和二义性。

共享基类问题是指在多重继承中,派生类的不同分支共享同一个基类,但每个分支通过独立的路径继承,导致基类在派生类中存在多个实例。虚基类可以用于共享基类,确保派生类中的虚基类实例只有一个,从而避免数据冗余和一致性问题。

虚基类的主要作用是:

  1. 消除冗余:通过使用虚基类,避免在派生类中出现多个基类实例,从而消除了数据和函数的冗余。

  2. 解决二义性:在菱形继承中,虚基类确保派生类只有一个基类实例,消除了由多个路径继承引起的二义性问题。

  3. 维护一致性:通过共享基类实例,虚基类确保派生类中的基类数据保持一致,避免了数据一致性问题。

相关:C++ 虚基类

#include <iostream>
using namespace std;
class Base0 {
public:
	int var0;
	void fun0() { cout << "Member of Base0" << endl; }
};
class Base1 : virtual public Base0 {
public:
	int var1;
};
class Base2 : virtual public Base0 {
public:
	int var2;
};

class Derived : public Base1, public Base2 {
	//定义派生类Derived 
public:
	int var;
	void fun() {
		cout << "Member of Derived" << endl;
	}
};

int main() {
	Derived d;
	d.var0 = 2; //直接访问虚基类的数据成员
	d.fun0();   //直接访问虚基类的函数成员
	return 0;
}

结果:Member of Base0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值