c++11 - 在运行时确定的函数类型被定义为优势的事实?
问题描述
我读到通过“继承”对通用代码使用的一个优点是“对象的类型在运行时确定的事实”,因为这样可以提供更大的灵活性。
我不明白这一点。它如何真正允许更大的灵活性?
例如,如果我从派生的类型中获取对象Base
,那么:
class Base{
public:
virtual void method() const { /* ... */ }
};
class D1 : public Base{
public:
void method() const override { /* ... */ }
};
class D2 : public Base{
public:
void method() const override { /* ... */ }
};
我发送给函数f
(例如)以下对象:
Base* b = new D1;
f(b);
灵活性在哪里(它被定义为在运行时完成的优势)?
解决方案
你的例子没有展示它,但它可以。
f(b)
可能
void f(Base* b) {
b->method();
}
现在,实际method()
执行的代码在 运行时由传入的对象类型决定。
它如何真正允许更大的灵活性?
它更灵活,因为作者f(..)
不需要知道Base:method()
在任何特定情况下是如何工作的:您可以添加具有新实现的 D3、D4、D5 类,method()
而无需f(..)
知道或更改。
推荐阅读
- jenkins - Jenkins 版本历史与 java 版本要求
- selenium-webdriver - 拖放操作在硒中不起作用,它也没有显示任何错误
- google-sheets - 如何在 Google 表格中设置跨多个工作表的多个条件的 QUERY 公式?
- php - 如何在 PHP 中的“addApiParam”上使用 foreach 循环?
- android - 如何从异步任务中的“onPostExecute”中删除事件监听器
- ios - 保存数据后。然后弹出视图控制器
- mongodb - 如何根据条件将数据框插入/更新到 Mongodb
- sas - 如何从库中的所有表中提取一些信息?
- mysql - 根据其他 2 张桌子返回可用房间
- java - 尝试在空对象引用 onCreateView(Fragment.java) 上调用虚拟方法 RecyclerView