如何禁止子类重写方法

Tags
CPP语言
ID
16
 
在 C++ 中,如果你不希望让你的函数在继承的子类中被重写(覆盖),可以使用 final 关键字。final 关键字用于修饰类中的虚函数,表示该函数不可被子类重写。
使用 final 关键字的方法如下:
class Base { public: virtual void foo() final { // 函数体 } }; class Derived : public Base { public: // 尝试重写 foo() 将导致编译错误 // void foo() override { // // 子类中不能重写 foo() 函数 // } };
在上面的例子中,Base 类中的 foo() 函数被声明为 final,这意味着在任何派生类中都不能再对 foo() 进行重写。如果在 Derived 类中尝试重写 foo(),编译器将会产生错误,阻止你对该函数进行重写。
需要注意的是,final 关键字只能用于虚函数,用于非虚函数是没有意义的。同时,如果你不希望一个类被继承,可以将该类声明为 final,这样其他类就不能继承它。
class FinalClass final { // 类的成员和函数 };
以上代码中,FinalClass 类被声明为 final,意味着它不能被其他类继承。如果有其他类尝试继承 FinalClass,编译器将会报错。
总结:
  • 使用 final 关键字修饰虚函数,表示该函数不能被子类重写。
  • 使用 final 关键字修饰类,表示该类不能被其他类继承。