关于组合 继承

关于组合 继承

在c++中,应该何时用继承,何时用包含?

Homunculus

Homunculus

说什么is-a has-a都是扯淡的。鸭子是一种嘎嘎叫的鸟,是一种吃肉的鸟,鸽子是咕咕叫的鸟,是吃谷子的鸟,都是is-a,用继承的都是脑袋有泡。软件工程有个跟科学与数学相悖的经验:抽象程度越高,能应对的变化越少。面向对象对上面所说的复杂的情况就不适用了,泛型编程绝大多数都用作基本容器,有些人用C++模板写的自以为通用的程序,到头来只兼容自己的需求,甚至自己加东西的时候还要改模板。许多程序员都是自以为是、一厢情愿的认为会有不同需求、自己的抽象能应对不同需求,谬也。减少抽象,不要多想,有啥功能就写啥,该if就if,该函数就函数,是码农减少工作量的重要手段。回到问题。我举的例子是说明is-a/has-a并不能良好的区分继承与组合(就是题目中的包含),然后说明了继承应对复杂变化有些吃力。那么到底什么时候用继承什么时候用组合呢?不知道,具体情况具体分析。继承实现起来比较简单,如果当前情况可以用的话就先用着,将来复杂了再把某个函数抽出来当一个类来包含。用继承与组合的时候不要过多考虑类和对象的关系,仅仅从少写代码的角度入手,许多东西就豁然开朗。

ref

[https://www.zhihu.com/search?type=content&q=组合 继承](https://www.zhihu.com/search?type=content&q=组合 继承)
https://www.zhihu.com/topic/19569910/hot

原文地址:https://www.cnblogs.com/cutepig/p/11961138.html