首页 > 编程语言 > 详细

浅析C++多重继承

时间:2014-11-20 22:01:06      阅读:190      评论:0      收藏:0      [点我收藏+]

继承是面向对象的三大特征之一。但是对于继承的实现和使用方式,各种不同的面向对象语言有各自的观点。有些语言支持多重继承,而有些语言则只支持单一继承。
多重继承的确引入了较大的复杂度。那么,在不得已使用的时候,需要注意几个方面的处理方式,才能使代码更加高效易懂

  • 封装同名函数

对于多个父类中出现同名的函数,最好的处理方法是为这些父类新添一个辅助类,在辅助类中用不同的函数名字来封装同名函数。这样可以更加轻松的调用这些同名函数。

class CSofa
{
public:
	// 同名函数
	virtual void Clean();
};

class CBed
{
public:
	// 同名函数
	virtual void Clean();
};

// 辅助类
class AuxSofa : public CSofa
{
public:
	virtual void CleanSofa() = 0;
	// 转接到新接口
	virtual void Clean() { CleanSofa(); }
};

// 辅助类
class AuxBed : public CBed
{
public:
	virtual void CleanBed() = 0;
	// 转接到新接口
	virtual void Clean() { CleanBed(); }
};

class CSofaBed : public AuxSofa, public AuxBed
{
public:
	// 清晰明确的接口名字,避免了同名困扰
	virtual void CleanBed();
	virtual void CleanSofa();
};
  • 利用virtual继承的方式攻克钻石型继承

bubuko.com,布布扣

此类继承,D类往往会持有两份A类的数据,造成空间的巨大浪费。可以利用virtual继承的方式来避免多份A类内容的出现。

class CSofa
{
public:
	virtual void Clean();
};

class CBed
{
public:
	virtual void Clean();
};

class CSofaBed : public virtual CSofa, public virtual CBed
{
public:
	
};






浅析C++多重继承

原文:http://blog.csdn.net/linqingwu75/article/details/41319361

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!