我读到,通过“继承”对通用代码使用的一个优势是“事实是在运行时确定了对象的类型”,因为这样可以提供更大的灵活性。
我不明白这一点。到底如何提供更大的灵活性?
例如,如果我从派生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);
灵活性在哪里(定义为在运行时完成的优势)?
答案 0 :(得分:1)
您的示例并未演示,但是可以。
f(b)
可能是
void f(Base* b) {
b->method();
}
现在,实际执行的method()
代码由传入对象的类型在 运行时中确定。
它如何真正带来更多的灵活性?
它更灵活,因为f(..)
的作者不需要知道Base:method()
在任何特定情况下的工作方式:您可以使用新的{{1}实现添加D3,D4,D5类},而无需method()
。