在 C++ 中,override 是 C++11 引入的一个关键字,用于显式地表明派生类中的成员函数是重写基类中的虚函数。它不仅增强了代码的可读性,还提供了编译期的校验功能,确保函数签名与基类虚函数严格匹配。
作用与优势
- 编译期校验 :当使用
override时,编译器会检查该函数是否确实重写了基类中的某个虚函数。如果函数签名不匹配(如参数类型、const限定符、返回类型等),编译器将报错,防止"假重写"或"意外隐藏"问题。 - 提高安全性:避免因拼写错误或参数类型不一致导致的函数未被正确重写,从而引发运行时行为不符合预期的问题。
- 增强可读性:明确表达程序员的意图,即该函数是用于重写基类虚函数的。
使用方式
override必须出现在成员函数声明的末尾,紧接在const或noexcept之后。- 它只能用于虚函数的重写,不能用于新增函数。
- 若基类中没有对应的虚函数,或者函数签名不匹配,使用
override会导致编译错误。
cpp
class Base {
public:
virtual void foo(int x) const;
};
class Derived : public Base {
public:
void foo(int x) const override; // 正确:成功重写
// void foo(double x) const override; // 错误:基类没有匹配的虚函数
};
语法位置
override 关键字必须放在函数声明的最后,即参数列表之后、const 或 noexcept 之后。例如:
cpp
virtual ReturnType Function(params) const override;
与 final 的结合使用
override 可以与 final 结合使用,表示该虚函数在当前派生类中被重写,并且不能再被进一步重写。例如:
*
cpp
class Base {
public:
virtual void func();
};
class Derived : public Base {
public:
void func() override final; // 表示此函数不能再被重写
};
override 是 C++11 中一个重要的关键字,用于确保虚函数的正确重写,提升代码的安全性和可维护性。它通过编译期检查,帮助开发者避免常见的错误,同时使代码意图更加清晰。