组合还是继承?
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全部使用继承的方式.会出现很多问题