前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++之虚继承

C++之虚继承

作者头像
zy010101
发布2020-04-08 16:49:07
8230
发布2020-04-08 16:49:07
举报
文章被收录于专栏:程序员程序员程序员

如果一个类从多个类继承而来,而这些类有公共基类。那么在多该基类中定义的成员访问时会出现二义性。C++设计虚继承来解决这个问题。虚继承的本质就是子类引用父类的内存空间,而不创建自己的内存空间。这样既解决了多重继承可能引发的二义性问题,也使得内存得以释放。

在虚继承过程中的基类被叫做:虚基类

那么实际上,虚继承的本质就是使用一个指向虚基类的指针,这样就无论你怎么继承,就只有一份基类内存空间。

C++使用关键字virtual来进行虚继承。

语法:class B : virtual public A{};

#include<iostream>

using std::cout;
using std::endl;

class MyClass
{
public:
	int a;
	int b;
};

class C1 : virtual public MyClass
{
public:
};

class C2 : virtual public MyClass
{
public:
};

class Last : public C1, public C2			//多继承
{

};
int main()
{
	Last L;

	L.a;

	return 0;
}

通过虚继承,这样MyClass类的内存空间只有一份。就不会有二义性了。

还有一种情况是这样的。

这种情况下,虚继承也无法帮到我们。我们只能使用

c.A::a;
c.B::a;

来明确对类成员的调用,从而避免二义性的产生。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档