一个C++类继承的问题?/

「已注销」 2010-06-20 08:40:42
假设表示头部的类(Head)包含了眼(Eye )、鼻(Nose )、口(Mouth )、耳(Ear )等 如:

class Eye
{
public:
void Look(void);
.....
};
class Mouth
{
public:
void Eat(void);
.....
};
....


在设计Head类的时候以下两种方法那个好?
A: 继承

class Head : public Eye, public Nose, public Mouth, public Ear
{
.....
};

B: 包含

class Head
{
public:
void Look(void) { m_eye.Look(); }
void Smell(void) { m_nose.Smell(); }
.....
.....
private:
Eye m_eye;
Nose m_nose;
.....
.....
};


...全文
143 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
至善者善之敌 2010-06-21
  • 打赏
  • 举报
回复
看需求了,习惯上我肯定用第二种
Mygod_dao3712 2010-06-21
  • 打赏
  • 举报
回复
继承与组合,选组合。
lixing01 2010-06-21
  • 打赏
  • 举报
回复
事物已经被简化和抽象了,这儿只是考虑包含还是属于?再从逻辑上想想他们之间的关系
cs_yagami 2010-06-21
  • 打赏
  • 举报
回复
應該要用邏輯去思考,而不是用語法去思考這個問題。
sallan 2010-06-21
  • 打赏
  • 举报
回复
此类问题应该是选组合
当你要使用一种功能,而它又不具备你所要的扩展功能时,用继承
zhupf52 2010-06-21
  • 打赏
  • 举报
回复
继承与组合,选组合。
blackboycpp 2010-06-21
  • 打赏
  • 举报
回复
B好显然
Bit_Saxy 2010-06-21
  • 打赏
  • 举报
回复
这种问题,当你遇到问题的时候再问吧。所有的设计都与需求有关,如果你的程序就是这么简单的,那么用什么都行,当你的需求变的复杂的设计,可能再好的设计都还是需要变动的,一句话,设计的东西在遇到问题的时候去改进,理解是最深刻的。
ForestDB 2010-06-21
  • 打赏
  • 举报
回复
head is not an eye, nor a ear, nor something...
head has eyes, ears and balabala...
品茶 2010-06-21
  • 打赏
  • 举报
回复
貌似以前有个写了10多万行代码的牛人
本来有自己的公司

就是被组合给忽悠进了华为
tjyjx7946358 2010-06-20
  • 打赏
  • 举报
回复
继承与组合,选组合。
djjlove_2008 2010-06-20
  • 打赏
  • 举报
回复
组合与继承的选择得靠你自己的权衡,加油啊楼主,感觉 的基础不是委好。has a和is a的关系确实有点老火。
reddevillg 2010-06-20
  • 打赏
  • 举报
回复
... 貌似是应该用组合~
reddevillg 2010-06-20
  • 打赏
  • 举报
回复
private继承呢~?
「已注销」 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 miracle222 的回复:]

引用 10 楼 sherlinlove 的回复:

引用 9 楼 pengzhixi 的回复:

这个用组合比较好,我的理由很简单:人的脑袋就是由这些五官组成的。


嗯很合逻辑, 不过就像上面说的如果组合的类比较大的话我想还是会有人选择继承的
还有组合修改起来可能是件比较头疼的事

组合修改怎么会比较头疼呢?应该是继承修改起来更麻烦吧。。。
[/Quote]

当一个或多个组合类的方法变了 你不是得更改大的那个类里的方法 而继承的话就不用了
miracle222 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sherlinlove 的回复:]

引用 9 楼 pengzhixi 的回复:

这个用组合比较好,我的理由很简单:人的脑袋就是由这些五官组成的。


嗯很合逻辑, 不过就像上面说的如果组合的类比较大的话我想还是会有人选择继承的
还有组合修改起来可能是件比较头疼的事
[/Quote]
组合修改怎么会比较头疼呢?应该是继承修改起来更麻烦吧。。。
「已注销」 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pengzhixi 的回复:]

这个用组合比较好,我的理由很简单:人的脑袋就是由这些五官组成的。
[/Quote]

嗯很合逻辑, 不过就像上面说的如果组合的类比较大的话我想还是会有人选择继承的
还有组合修改起来可能是件比较头疼的事
pengzhixi 2010-06-20
  • 打赏
  • 举报
回复
这个用组合比较好,我的理由很简单:人的脑袋就是由这些五官组成的。
「已注销」 2010-06-20
  • 打赏
  • 举报
回复
那如果组合的类比较多或类的方法比较多 有几百个或更多, 那Head不是很难写 了
「已注销」 2010-06-20
  • 打赏
  • 举报
回复
谢谢各位的回答
哈 还真是头疼
加载更多回复(6)

64,677

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧