c++ - 具体类的继承是邪恶的吗?

标签 c++

<分区>

我的大部分类型都使用接口(interface)/抽象基类,并且不经常从具体类继承,但我最近遇到了需要继承或组合的情况。我知道这句格言“针对接口(interface)编程,而不是针对实现”,但最近决定深入挖掘。

我看过争论 against inheritance ,我见过计数器 arguments但我很好奇大型代码库的其他维护者在现实生活中实际上做了什么。恐惧被夸大了吗?您是从具体类继承,还是继承怀疑论者是正确的?我特别有兴趣听取那些使用 C++ 工作的人的意见。

最佳答案

不是 C++ 专家(在 C#、Java 和 Ruby 方面拥有大型企业系统的专业经验),但无论如何这是我的 2 美分

这不是非黑即白的事情。

继承的问题在于它引入了紧耦合。更糟糕的是,耦合通常围绕封装状态。父类(super class)中的更改可能会对继承层次结构产生链式 react ,产生微妙且难以预测的错误。

接口(interface)隔离完全回避了这些问题,因为它不会以同样的方式破坏封装。

继承的好处在于,有时您拥有的对象模型实际上是同一事物,只是有非常小的更改或添加。只要该更改非常明确,范围不广,并且不是额外的约束(参见 circle-ellipse 问题),代码重用将胜过紧耦合。

我坚持将组合置于继承之上作为经验法则,而不是法律。

关于c++ - 具体类的继承是邪恶的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3887871/

相关文章:

c++ - 在构造函数中初始化私有(private) std::array 成员

c++ - 这是什么意思 "!somePointer"?

c++ - 什么是 CInternetSession 的必要清理

c++ - Qt的QFontMetrics::horizo​​ntalAdvance()在代码编辑器实现中丢失

c++ - 时间功能有时有效有时无效

c++ - WinRT C++ ComPtr GetAddressOf 与 &

c++ - 测试整数类型是有符号还是无符号的宏

c++ - Qt 设计器 - 动态生成 UI/生成唯一名称?

c++ - Objective-C 类实现 C++ 接口(interface)

c++ - 在包含多个字符串的多个对象中查找子字符串