C++11新特性之final
- 开源代码
- 2025-09-07 19:09:02

1.介绍
final是C++11引入的特性,用于限制类或虚函数的进一步继承或重写,旨在增强代码的安全性和可维护性。经常与override一起使用。不了解override的读者可以看这里———>C++11新特性之override-CSDN博客
2.final的用法
(1)禁止类被继承
将final关键字放在类名后边,可以禁止其他类继承该类。例如:
class Base final { // Base 类不能被继承 public: void func() { std::cout << "Base::func()" << std::endl; } }; // class Derived : public Base {}; // 错误:Base 是 final 类,不能继承 int main() { Base baseObj; baseObj.func(); // 输出: Base::func() return 0; }(2)禁止虚函数被重写
将final关键字放在虚函数声明后面,可以进制派生类重写该函数。例如:
class Base { public: virtual void func() final { // 禁止派生类重写 func std::cout << "Base::func()" << std::endl; } }; class Derived : public Base { public: // void func() override {} // 错误:Base::func() 是 final,不能重写 }; int main() { Derived derivedObj; derivedObj.func(); // 输出: Base::func() return 0; }(3)override与final结合使用
final与override一起使用,以明确表明函数是重写的,但禁止进一步的重写。例如:
class Base { public: virtual void func() { std::cout << "Base::func()" << std::endl; } }; class Derived : public Base { public: void func() override final { // 重写并禁止进一步重写 std::cout << "Derived::func()" << std::endl; } }; class FurtherDerived : public Derived { public: // void func() override {} // 错误:Derived::func() 是 final,不能重写 }; int main() { FurtherDerived obj; obj.func(); // 输出: Derived::func() return 0; }3.final的使用场景
(1)设计不可扩展的类。一个类设计完整,不需要被继承,可以用final。
(2)保护关键虚函数。当某个虚函数实现已经固定,不希望派生类修改时,可以使用final。
(3)优化性能:标记为final的类或虚函数可以帮助编译器进行优化,因为编译器知道它们不会被进一步拓展或重写了。
4.总结
final用于禁止类被继承或虚函数被重写。
它可以增强代码的安全性和可维护性,防止意外的继承或重写。
结合 override 使用,可以更清晰地表达设计意图。
适用于设计不可扩展的类或保护关键虚函数的场景。
合理使用final,可以更好地控制类的继承层次和虚函数的行为,使代码更加健壮和易于维护。
如有错误,敬请指正!!!
C++11新特性之final由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++11新特性之final”