读书人

组合还是继承?解决方案

发布时间: 2012-04-06 12:22:24 作者: rapoo

组合还是继承?
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;
}


看(see)听(hear)分别是眼睛和耳朵的功能,人有眼睛和耳朵,可以看和听。我认为人不应该继承于眼睛和耳朵,但如果不继承就必须把眼睛和耳朵的能力在人(person)的接口里重新描述,感觉有点罗嗦。
求指教
谢谢

[解决办法]
class CSomeBody:pulic CIPerson
{
///.....
}
CIPerson *p= new CSomeBody();

CEye peye=p.getEye();
peye.xx(); //some body look
CEar pear=p.getEar();
pear.xx(); //some body listen

读书人网 >C++

热点推荐