首页 > 解决方案 > 在运行时确定的函数类型被定义为优势的事实?

问题描述

我读到通过“继承”对通用代码使用的一个优点是“对象的类型在运行时确定的事实”,因为这样可以提供更大的灵活性。

我不明白这一点。它如何真正允许更大的灵活性?


例如,如果我从派生的类型中获取对象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);

灵活性在哪里(它被定义为在运行时完成的优势)?

标签: c++11inheritancepolymorphism

解决方案


你的例子没有展示它,但它可以。

f(b)可能

void f(Base* b) {
    b->method();
}

现在,实际method()执行的代码 运行时由传入的对象类型决定。

它如何真正允许更大的灵活性?

它更灵活,因为作者f(..)不需要知道Base:method()在任何特定情况下是如何工作的:您可以添加具有新实现的 D3、D4、D5 类,method()而无需f(..)知道或更改。


推荐阅读