C++面试题更新 2026-08-05

在 C++ 中,final 关键字可以应用于类和虚函数,它的主要作用是什么?请分别说明其对继承和虚函数重写的影响。

技术原理C++

考察说明

考查 C++ 中 final 关键字的用途及其对继承和虚函数机制的影响。

回答思路

  1. 【回答框架 1】final 关键字是 C++11 引入的,用于限制继承和虚函数的重写。当应用于类时,该类不能被继承;当应用于虚函数时,该虚函数不能在派生类中被重写。
  2. 【回答框架 2】对于类,在类声明中加上 final 说明符,如 class Base final { ... }; 任何尝试继承该类的行为都会导致编译错误。这有助于设计封闭的类层次结构,防止意外的派生。
  3. 【回答框架 3】对于虚函数,在虚函数的声明末尾添加 final,如 virtual void f() final; 这样派生类不能重写该虚函数。这保证了虚函数的实现固定,适用于控制接口的稳定性。
  4. 【回答框架 4】final 关键字与 override 类似,但含义不同:override 用于显式标注重写,而 final 用于终止重写。它们可以同时使用,如 virtual void f() override final; 表示重写且禁止再重写。
  5. 【回答框架 5】此外,final 关键字只用于虚函数和类,对于非虚函数没有意义;非虚函数本就无法被重写,但可以被隐藏。
  6. 【关键点 1】final 用于类时禁止继承,用于虚函数时禁止重写。
  7. 【关键点 2】final 是 C++11 标准引入的关键字。
  8. 【关键点 3】final 与 override 含义不同,可同时使用。
  9. 【关键点 4】final 只作用于虚函数,非虚函数不能使用。
  10. 【易错点 1】容易混淆 final 与 override 的用途,final 是禁止重写,override 是显式声明重写。
  11. 【易错点 2】在类中使用 final 会限制类的扩展性,需要根据设计权衡。
  12. 【易错点 3】非虚函数不能使用 final,否则编译错误。