将运行时确定的函数类型定义为优势的事实?

时间:2018-07-03 15:18:17

标签: c++11 inheritance polymorphism

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

我不明白这一点。到底如何提供更大的灵活性?


例如,如果我从派生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);

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

1 个答案:

答案 0 :(得分:1)

您的示例并未演示,但是可以。

f(b)可能是

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

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

  

它如何真正带来更多的灵活性?

它更灵活,因为f(..)的作者不需要知道Base:method()在任何特定情况下的工作方式:您可以使用新的{{1}实现添加D3,D4,D5类},而无需method()