C++之多继承

C++支持多继承,其它的面向对象编程语言几乎都不支持多继承。而多继承一旦使用不当就会造成二义性。这可能就是其它语言都不支持多继承的原因。实际来看,几乎没有使用多继承的必要性。

下面来段代码展示一下多继承和二义性。

#pragma once
#include<iostream>

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

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

class C1 : public MyClass
{
public:
};

class C2 : public MyClass
{
public:
};

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

};

Last类继承自C1和C2类。C1和C2都是继承自MyClass类。

#include"MyClass.h"

int main()
{
	Last L;

	L.a;		//二义性

	return 0;
}

编译这段代码,会有如下的错误提示。

它明确的告知你访问不明确。

除非我们明确支持它是调用哪个父类的成员。这样才不会造成二义性。

	L.C1::a;		
	L.C2::b;

基于此,C++设计了虚继承来解决上述问题的出现。

 

发布了222 篇原创文章 · 获赞 174 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/zy010101/article/details/105273293