c++ - 您只需为您使用的东西与继承付费
问题描述
在讨论什么是好的 C++ 时吹捧的一句话是“你只需为你使用的东西付费”。我听说这被用作不使用继承/多态构造和对接口进行编码的想法的理由,因为这些构造将需要在运行时使用 v-table 来处理编译时已知的东西。
这是真的?基本的 OOP 是否打破了 C++ 的主要原则(特别是“编码到接口”的想法是否打破了“你只需为你使用的东西付费”的想法?
解决方案
为正确的工作使用正确的工具。
当在编译时无法知道某个对象的确切类型时,v-table 很有用。如果这适用于你的程序,那么你就是为你使用的东西付费。如果它不适用,那么有一些方法可以在不引入 v-table 的情况下实现安全多态性(不使用虚函数;使基类析构函数受保护)。
这里没有内在的矛盾,但需要了解所使用的工具。使用次优工具并最终支付比您使用的更多的费用并不难。(你可以对算法说同样的话——使用次优算法并不难,最终会使用比你需要的更多的时间/空间。这不是语言的错。)
推荐阅读
- javascript - Javascript-验证后防止页面重定向
- c++ - 当我们在 c 中使用 fopen() 搜索文件时实现了哪种搜索技术
- android - 在 recyclerView 中更新项目的最佳方法
- c - 如何在 C 中准确地回显标准输出
- go - bazel build 给出“参数列表太长”错误
- javascript - 无法弄清楚如何使用 javascript 中的按钮随机生成数字
- scala - Spark Scala:如何根据 Vector 的每个位置更新 DataFrame 的每一列
- python - 蟒蛇3。有什么特殊方法?它有什么作用?
- html - 带有进度条出血的表格单元格
- javascript - 动态隐藏和显示更多文本到特定字符Javascript