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 {  // 使用 override
        std::cout << "Derived class display" << std::endl;
    }
};

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

override 的作用

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

1. 函数签名不匹配

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

class Derived : public Base {
public:
    void display() override {  // 错误:基类的display函数是const
        std::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 show
    basePtr->display(42); // 输出:Derived display with int 42
    delete basePtr;
    return 0;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值