📅  最后修改于: 2023-12-03 14:39:57.036000             🧑  作者: Mango
在C++11中加入了final
关键字,它可以用在类,成员函数及虚函数上,用于限制其不能被继承或覆盖。
class Base final {
// ...
};
上述代码中,Base
类被final
修饰,表示此类不能被其他类继承。如果有其他类尝试继承Base
类,则会收到编译错误。
class Base {
public:
virtual void foo() final
{
// ...
}
};
class Derived : public Base {
public:
void foo()
{
// 编译错误,不能覆盖final函数
}
};
上述代码中,Base
类中的foo()
函数被final
修饰,表示此虚函数不能被其子类覆盖。
class Base {
public:
virtual void foo()
{
// ...
}
};
class Derived : public Base {
public:
void foo() final override
{
// ...
}
};
上述代码中,Derived
类中的foo()
函数被final
修饰,表示此虚函数不能被其子类再次覆盖。
使用final
关键字可以帮助提高代码的安全性。比如一个系统的关键组件,如果不希望被不受信任的子类继承并覆盖其中的函数,那么可以将这个类或函数声明为final
,以保障其完整性。
使用final
关键字还可以帮助编译器优化程序性能。当编译器看到某个函数是final
时,它可以省略一些虚函数的调用,减少程序开销。
final
关键字可以帮助我们限制类、函数的继承和覆盖,提高程序的安全性和性能。但是,在使用final
关键字时,需要谨慎考虑,以免引入不必要的复杂性。