C++11 在运行时确定的函数类型被定义为advantage?

C++11 在运行时确定的函数类型被定义为advantage?,c++11,inheritance,polymorphism,C++11,Inheritance,Polymorphism,我了解到,将by“继承”用于泛型代码的一个优点是“在运行时确定对象的类型”,因为这允许更大的灵活性 我不明白这一点。它是如何真正允许更大的灵活性的 例如,如果我从派生Base的类型获取对象,那么: class Base{ public: virtual void method() const { /* ... */ } }; class D1 : public Base{ public: void method() const override { /* ... */

我了解到,将by“继承”用于泛型代码的一个优点是“在运行时确定对象的类型”,因为这允许更大的灵活性

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


例如,如果我从派生
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()
在任何特定情况下是如何工作的:您可以使用
method()
的新实现添加D3、D4、D5类,而无需知道或更改
f(…)
是的,这一点很清楚。但是我的QueSube是“为什么它被定义为优势”(在运行时它被确定),你需要使用一个指针来获得C++中的多态性。code>b->method()读一本真正的面向对象编程的书。这不是一所编程学校。任何关于OO编程的书籍或教程都应该提供激励性的例子。一个常见的例子是图形程序,其中包含可以显示的不同类型对象的类。呈现函数调用
object->display()
,并调用适合该类型的方法。顺便说一句,它应该是
Base*b
,因为
new
返回指针。