首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

组合还是继承?解决方法

2013-10-21 
组合还是继承?class CIEye{virtual void See() 0}class CIEar{virtual void Hear() 0}如何定义Perso

组合还是继承?
class CIEye
{
   virtual void See() = 0;
}
class CIEar
{
   virtual void Hear() = 0;
}

如何定义Person
是应该
class Person:public CIEye,pubic CIEar
{

public:
virtual void SetEye(CIEye* eye) = 0;
virtual void SetEar(CIEar* ear) = 0;
private:
CIEye* m_MyEye;
CIEar* m_MyEar;
}

还是应该?
class CIPerson
{
public:
virtual void See() = 0;
virtual void Hear() = 0;

virtual void SetEye(CIEye* eye) = 0;
virtual void SetEar(CIEar* ear) = 0;
private:
CIEye* m_MyEye;
CIEar* m_MyEar;
}
[解决办法]
组合,继承是是一个的关系,这里是有一个,人有耳朵和眼睛
[解决办法]
当然是组合,楼上正解,人有耳朵和眼睛,不是继承了它们的类,而是有这些东西组合在人身上

换到代码中,可以这么理解,不要随意继承类,除非它们有共用代码和属性
否则很容易生成意大利面条式继承

以你的例子来说,人不是只有耳朵和眼睛,还有四肢,骨骼,内脏,意识,若是CIPerson全部使用继承的方式.会出现很多问题

热点排行