推荐答案
在C++11中,override
和 final
是两个用于类继承和多态的关键字。
override
:用于显式地标记派生类中的虚函数,表示该函数是对基类中虚函数的重写。如果派生类中的函数签名与基类中的虚函数不匹配,编译器会报错,从而帮助开发者避免错误。final
:用于标记类或虚函数,表示该类不能被继承,或者该虚函数不能被派生类重写。使用final
可以防止进一步的继承或重写,增强代码的安全性和可维护性。
本题详细解读
override
关键字
在C++11之前,派生类中重写基类的虚函数时,如果函数签名不匹配(例如参数类型或数量不同),编译器不会报错,而是将其视为一个新的函数。这可能导致难以发现的错误。
C++11引入了 override
关键字,允许开发者显式地标记派生类中的虚函数,表示该函数是对基类中虚函数的重写。如果函数签名不匹配,编译器会报错,从而帮助开发者避免错误。
-- -------------------- ---- ------- ----- ---- - ------- ------- ---- --------- -- ----- ------- - ------ ---- - ------- ---- -------- --------- -- ----------- ---- ----------- --------- -- ---------------- --
final
关键字
final
关键字可以用于类或虚函数,表示该类不能被继承,或者该虚函数不能被派生类重写。
- 用于类时,
final
表示该类不能被继承。
class Base final { // ... }; class Derived : public Base { // 错误:Base 是 final 类,不能被继承 // ... };
- 用于虚函数时,
final
表示该虚函数不能被派生类重写。
-- -------------------- ---- ------- ----- ---- - ------- ------- ---- ----- ------ -- ----- ------- - ------ ---- - ------- ---- ------ -- ------------ - ----- -------- --
通过使用 final
,开发者可以防止进一步的继承或重写,增强代码的安全性和可维护性。