如何知道函数何时必须是虚拟的?

Vex*_*toR 6 c++ virtual-functions class

在描述一个类时,如何知道函数何时必须是虚拟的?

我知道虚函数意味着什么,但我无法弄明白何时我应该将它们变为虚拟

谢谢

Bjö*_*lex 3

如果您想以多态方式调用函数,则函数应该是虚拟的。换句话说,虚函数表达了可以在子类中自定义的行为。例如,考虑以下类:

class Car {
public:
    const std::string & getId() const;
    virtual void startEngine() = 0;
private:
    std::string id;
}
Run Code Online (Sandbox Code Playgroud)

每辆车都有一个Id,并且这里不允许进行定制,因此将其设为虚拟是没有意义的。子类不应该能够修改该属性。然而,发动机如何启动取决于具体的汽车,并且实际上不能全局定义。但我们确实知道,每辆车都必须启动发动机才能行驶,因此我们将其定义为纯虚函数。

非虚拟接口惯用法给出了何时将函数虚拟化、何时不虚拟化的重要指南。