假设我有以下基类:
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 {};
};
Approach 1
是一个完全详细的时候Approach 2
更紧凑和final
仍然这么说f()
实际上是虚拟的并且重写了基类方法。
哪一种方法更合适?
在“方法一”中,虚拟确实是多余的。 “override”是一个特殊的标识符,它向代码的读者显示虚拟函数正在被覆盖,同时也是编译器验证它是否被覆盖的提示actually是。基类已经声明该函数是虚函数,因此无需再次声明。
当不使用“final”关键字时,最好使用“virtual”,只是为了保持可读性。在这种情况下,方法 2 是最佳实践表示法。
这有点取决于您的环境中使用的样式,但最终并不意味着覆盖最终。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)