我只是为了确保没有人会从我的非多态类派生,所以我使用了以下语法:
class Foo final
{
Foo();
~Foo(); // not virtual
void bar();
};
在C++编程语言中,我读到
final
可以与override
一起用于包含虚拟成员函数的类。我在VS 2013中尝试了代码示例,并且在编译时没有任何警告。是否允许对非多态类使用关键字
final
来防止从该类派生?关键字override
对非多态类有意义吗? 最佳答案
C++语法允许final
出现在两个不同的位置。一个是class-virt-specifier,它可以出现在类声明中的类名称之后,这就是您使用它的方式。尽管有名称,但使用class-virt-specifer与虚拟函数无关,并且在非多态类中允许使用。
它可以使用的另一个地方是成员函数上的virt-specifier。如果存在,则virt-specifer序列由final
和override
中的一个或两个组成,但仅在虚拟函数上允许(9.2 [class.mem]“virt-specifier-seq最多应包含每个virt-specifier中的一个。 virt-specifier-seq应该仅出现在虚拟成员函数的声明中(10.3)。”)。因此override
仅可用于虚函数,因此不能用于非多态类型。