在对 C++11 关键字的各种 解释final
中,我看到了这样的例子。
class base
{
public:
virtual void f() final;
};
class derived : public base
{
public:
virtual void f(); // Illegal due to base::f() declared final.
};
这实际上是有用的用途final
吗?为什么要在基类中声明一个虚函数(暗示它将在派生类中有用地重写)然后立即将其标记为final
(否定该暗示)?有什么用处virtual void f() final
?
我可以看到标记derived::f()
final 而不是base::f()
. 在这种情况下,base::f()
大概有一个很好的基于设计的理由说明为什么f()
应该是虚拟的,并且derived::f()
单独有一个很好的基于设计的理由说明为什么没有进一步的派生类应该覆盖其实现。
如果您不想多态地覆盖该函数,为什么不直接去掉 virtual 关键字呢?当然,派生类仍可能以非多态方式覆盖该函数。virtual void f() final
因此,在基类中的目的是要base::f()
以任何方式坚定地不可覆盖——无论是作为虚拟函数还是非虚拟函数?如果是这样,那么我们必须virtual
在这种情况下添加关键字才能启用final
. 我认为将非虚拟功能标记为最终功能应该是合法的。
当意义和意义似乎矛盾时,为什么要使用virtual void f() final
源自基类的函数?virtual
final