C++之虚继承

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

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

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

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

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

#include

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++之虚继承_第1张图片

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

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

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

 

你可能感兴趣的:(C++)