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