C++中使用final禁止覆盖函数
C++11 引入了限定符 final,这在第 10 章介绍过。被声明为 final 的类不能用作基类,同样,对于
被声明为 final 的虚函数,不能在派生类中进行覆盖。
因此,要在 Tuna 类中禁止进一步定制虚函数 Swim(),可像下面这样做:
class Tuna:public Fish
{
public:
// override Fish::Swim and make this final
void Swim() override final
{
cout << "Tuna swims!" << endl;
}
};
您可继承这个版本的 Tuna 类,但不能进一步覆盖函数 Swim():
class BluefinTuna final:public Tuna
{
public:
void Swim() // Error: Swim() was final in Tuna, cannot override
{
}
};
程序清单 11.9 演示了限定符 override 和 final 的用法。
我们声明 BluefinTuna 时,也使用了关键字 final,这禁止将 BluefinTuna 类用作基类,因
此下面的代码将导致错误:
class FailedDerivation:public BluefinTuna
{
};
该文章会更新,欢迎大家批评指正。