虽然使用override标识符不是必需的,它是强烈建议,因为它将有助于防止无意的错误。
(如果你想知道为什么这是作为一个标识符,而不是一个关键词,实现我假定这是这样做的,名为“重写”可以作为在其他情况下,一个正常的变量名。如果它被定义为一个关键词,它会在所有的情况下被保留,这可能会破坏现有的应用程序)
最后的
有偶尔的时候,你不想让别人来重写虚函数,或者创建一个派生类。C + + 11将最终提供此功能的标识符。
下面的示例演示的最后标识符使非忽略的使用功能:
1
2
3
4
5
6
7
8
9
阶级基础
{
虚a()最终;/ /最后的标识符标记该函数作为非忽略
};
派生类:公共基础
{
虚a();/试图重写函数库::a()最终将导致编译器错误
};
最后的标识也可以用在类使其非遗传的:
1
2
3
4
5
6
7
阶级基础最终/最后的标识标志着这类不可继承
{
};
派生类:公共基础/试图重写final类基地将导致编译器错误
{
};
有一些正当的理由,最终使函数或类。例如,最终最常见的用途是确保一个不可变类保持不变。一个不可变类是专门设计的类的状态不能被创建后,改性。没有最终的标识符,派生类可以使类成为可变的功能。如果基类是最终的,不能将它的子类,这是不可避免的。
然而,一般来说,除非你有很好的理由,最后通常应该避免使用。如果你使用关键字,文件的原因,因为它可能不是很明显的继承你的代码的人。
默认
默认情况下,C++将提供一个默认构造函数,拷贝构造函数,赋值操作符(==操作符)和析构函数。如果你为你的类的所有这些功能替换版本,C++没有提供默认版本。然而,在C + + 11,你现在可以指定您希望编译器提供一个默认的吧。这是通过原型的功能和使用默认的说明符做: