【发布时间】:2019-08-21 12:54:12
【问题描述】:
我有一个关于在 C++ 中使用关键字 final 的问题。我了解虚函数是在基类中声明的成员函数,预计会在派生类中被覆盖。通过动态绑定,将调用适当的方法,具体取决于负责调用的对象的类型。但是,为了防止基类中的成员函数在任何派生类中被覆盖,我们将使用 final 关键字。
void startEngine() final;// Compile error!
virtual void startEngine() final; //No error
为什么我们使用“final”来防止基类中的成员函数在派生类中被覆盖,同时我们仍然必须一起使用关键字VIRTUAL(允许覆盖)。
我尝试删除 virtual 这个词,但出现编译错误:“nonvirtual function cannot be declared with 'final' modifier”
【问题讨论】:
-
如果不是虚拟的,则不能被覆盖。
-
我明白了,但是当我们使用 VIRTUAL 时(这意味着我们希望它被覆盖),那么为什么我们仍然必须一起声明 FINAL (这意味着我们不希望它被覆盖) .
-
这意味着我们已经遇到了一个虚函数链的末端。除此之外,实现更多的虚函数就没有意义了。
标签: c++ virtual-functions