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

问题描述 投票:0回答:1

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

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


例如,如果我从派生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++11 inheritance polymorphism
1个回答
1
投票

你的例子没有证明它,但它可以。

f(b)可能是

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

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

它如何真正实现更大的灵活性?

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

© www.soinside.com 2019 - 2024. All rights reserved.