您的位置:首页 > 科技 > 能源 > C++ override 关键字用法

C++ override 关键字用法

2025/2/28 20:05:35 来源:https://blog.csdn.net/qq_51753728/article/details/142184600  浏览:    关键词:C++ override 关键字用法

在 C++ 中,override 关键字用于明确地标识一个派生类中的成员函数是重写基类中的虚函数。这一功能引入于 C++11,能够帮助开发者避免由于函数签名错误(如参数或返回值类型不同)而未能正确重写基类函数的情况。使用 override 关键字可以让编译器在编译时检查重写是否成功,若未成功,会给出编译错误提示。

使用场景

当派生类需要重写基类中的虚函数时,通常会使用 override 关键字。这种用法可以提高代码的可读性和安全性,防止因为函数签名不同而导致的错误。

基本用法

1. 基类定义虚函数
class Base {
public:virtual void display() const {std::cout << "Base class display" << std::endl;}
};

2. 派生类重写虚函数,并使用 override

class Derived : public Base {
public:void display() const override {  // 使用 overridestd::cout << "Derived class display" << std::endl;}
};

在这个例子中,Derived 类中的 display 函数重写了 Base 类中的 display 函数,并且使用了 override 关键字。这向编译器明确表明,display 是对基类虚函数的重写。

override 的作用

override 的主要作用是防止以下情况:

1. 函数签名不匹配

如果函数签名不完全匹配(比如参数类型或个数不同),编译器会发出错误提示。例如,假设你错误地在派生类中写成了:

class Derived : public Base {
public:void display() override {  // 错误:基类的display函数是conststd::cout << "Derived class display" << std::endl;}
};

由于 Base::displayconst 成员函数,而 Derived::display 缺少 const,编译器会报错,提示此函数无法重写。

2. 函数名拼写错误

如果函数名拼写错误或参数列表有误,编译器也会给出错误提示。

class Derived : public Base {
public:void dislay() const override {  // 错误:拼写错误std::cout << "Derived class dislay" << std::endl;}
};

在这个例子中,由于拼写错误,dislay 并不重写 Base 类中的 display 函数,编译器会检测到并给出错误信息。

总结

  • override 明确表示派生类中的函数是重写基类中的虚函数。
  • 通过使用 override,可以避免函数签名不匹配或者拼写错误,减少隐藏错误的可能性。
  • 适合用于任何重写虚函数的场景,建议在编写派生类时养成使用 override 的习惯。

例子

以下是完整的例子展示了如何使用 override

#include <iostream>class Base {
public:virtual void show() const {std::cout << "Base show" << std::endl;}virtual void display(int x) {std::cout << "Base display with int " << x << std::endl;}
};class Derived : public Base {
public:void show() const override {  // 正确重写std::cout << "Derived show" << std::endl;}void display(int x) override {  // 正确重写std::cout << "Derived display with int " << x << std::endl;}
};int main() {Base* basePtr = new Derived();basePtr->show();      // 输出:Derived showbasePtr->display(42); // 输出:Derived display with int 42delete basePtr;return 0;
}

在这个例子中,Derived 类正确重写了 Base 类的虚函数,使用 override 关键字可以确保派生类中的重写函数具有正确的函数签名。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com