现在的位置: 首页 > 综合 > 正文

C++学习笔记22 关于多重继承 接口

2016年02月04日 ⁄ 综合 ⁄ 共 725字 ⁄ 字号 评论关闭

C++在语法上直接支持多重继承

class P1
{
protected:
	int i;
};
class P2
{
protected:
	int j;
};
class Child: public P1,public P2
{
public:
	Child()
	{
		i = 1;
		j = 2;
	}
	void print()
	{
	cout<<"i = "<<i<<" "<<"j = "<<j<<endl;
	}
};

 被实际开发经验抛弃的多继承
工程开发中真正意义上的多继承是几乎不被使用的
多重继承带来的代码复杂性远多于其带来的便利
多重继承对代码维护性上的影响是灾难性的
在设计方法上,任何多继承都可以用单继承代替

 

 C++中对多继承二义性的解决方案
虚继承::
为了解决从不同途径继承来的同名数据成员造成的二义性问题,可以
将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成
员在内存中就只有一个拷贝。

class P1: virtual public Object
{
protected:
	int i;
};
class P2:virtual public Object
{
protected:
	int j;
};

关于接口:

绝大多数面向对象语言都不支持多继承

绝大多数面向对象语言都支持接口的概念

 C++中没有接口的概念

C++中可以使用纯虚函数实现接口

class Interface
{
public:
	virtual void fun1() = 0;
	virtual void fun2(int i) = 0;
	virtual void fun3(int i, int j,) = 0;
};

接口类中只有函数原型定义,没有任何数据的定义。

实际工程经验证明
多重继承接口不会带来二义性和复杂性等问题
多重继承可以通过精心设计用单继承和接口来代替

接口类只是一个功能说明,而不是功能实现。
子类需要根据功能说明定义功能实现。

抱歉!评论已关闭.