C++11添加了final。
终于!
我理解final
有两个作用:
- 使类不可被继承。
- 使类中的(虚)函数在派生类中不可重写。
这两者似乎相互独立。但以以下示例为例:
class Foo
{
public:
virtual void bar()
{
//do something unimportant.
}
};
class Baz final : public Foo
{
public:
void bar() /*final*/ override
{
//do something more important than Foo's bar.
}
};
从上面的内容可以看出,我认为Baz
是final
的,因此我不需要指定它的virtual
成员函数bar
也是final
的。由于Baz
无法被继承,覆盖bar
的问题已经超出了范围。然而,我的编译器VC++ 2015在这方面非常安静。目前我还没有在其他编译器上进行测试。
如果有人能够解决这个问题,我会很高兴。如果有标准(如果有的话)的引用,那就更好了。同时,请说明我不知道的任何边界情况,这可能会导致我的逻辑信念失败。
所以,我的问题是:一个final class
是否会隐含地使其virtual
函数也变成final
?应该吗?请澄清。
我提出这个问题的原因是final
函数有资格进行去虚拟化,这是一个很好的优化。感谢您的帮助。
final
类的所有成员函数视为已声明为final
。 - M.M