假设我有以下基类:
class Base {
public:
virtual void f() {};
};
如果我想编写一个将覆盖 f()
并且不允许将其覆盖到它的派生类的类,可以使用以下方法编写它:
方法一:
class Derived : public Base {
public:
virtual void f() override final {};
};
方法 2:
class Derived : public Base {
public:
void f() final {};
};
方法 1
是一个非常详细的方法,而 方法 2
更紧凑并且 final
仍然说 f()
实际上是虚拟的并覆盖了基类方法。
哪种方法更合适?
最佳答案
在“方法一”中,虚拟确实是多余的。 “override”是一个特殊的标识符,它向代码的读者表明一个虚函数正在被覆盖,同时也是一个提示,让编译器验证它实际上是。基类已经声明了函数是虚函数,就不用再声明了。
当不使用“final”关键字时,最好使用“virtual”关键字,以保持可读性。方法 2 是这种情况下的最佳实践表示法。
这归结为您的环境中使用的样式,但 final 绝对不意味着覆盖 final。
关于c++ - 当使用 'virtual' 或 'override' 说明符时, 'final' 关键字不是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43466863/