C++ 之虚函数

本文详细介绍了C++中虚函数(virtual)和override关键字的作用,包括使用场景、目的以及它们在支持多态和防止错误方面的应用。特别强调了override仅应在派生类中使用,以及虚析构函数的重要性。
摘要由CSDN通过智能技术生成

虚函数

在C++中,virtualoverride关键字用于支持多态。

virtual 关键字

  1. 使用场景:在基类中声明虚函数
  2. 目的:允许派生类重写该函数,实现多态。
  3. 行为:当通过基类的指针或引用调用一个虚函数时,调用的是对象实际类的的函数版本
#include <iostream>

using namespace std;

class Vehicle
{
public:
    virtual void run();  // 在基类中声明了一个虚函数
    void stop();
};
void Vehicle::run()
{
    cout << "车跑起来了" << endl;
}
int main()
{
    Bike b;
    b.run();
    return 0;
}

override 关键字

  1. 使用场景:在派生类中重写虚函数
  2. 目的:明确指示函数意图重写基类的虚函数
  3. 行为:确保派生类的函数确实重写了基类中的一个虚函数。如果没有匹配的虚函数,编译器就会报错。
class Bike : public Vehicle
{
public:
    void run() override
    {
        cout << "脚踩自行车" << endl;
    };
};

完整代码如下

#include <iostream>

using namespace std;

class Vehicle
{
public:
    string contry;
    double price;

    Vehicle(){};
    virtual ~Vehicle(){};
    Vehicle(string contry, double price);
    virtual void run();  // 在基类中声明了一个虚函数
    void stop();
};

Vehicle::Vehicle(string contry, double price)
{
    cout << "基类构造函数被调用" << endl;
    this->contry = contry;
    this->price = price;
}

void Vehicle::run()
{
    cout << "车跑起来了" << endl;
}

class Bike : public Vehicle
{
public:
    void run() override
    {
        cout << "脚踩自行车" << endl;
    };
};

int main()
{
    Bike b;
    b.run();
    return 0;
}

在这里插入图片描述

注意点

  • 只在派生类中使用overide: override应仅用于派生类中重写基类的虚函数。
  • 虚析构函数:如果类中有虚函数,通常应该将析构函数也声明为虚的析构函数。
  • 默认情况下,成员函数不是虚的:在C++中,成员函数默认不是虚函数。只有显示地使用virtual关键字才会成为虚函数。
  • 继承中的虚函数:一旦在基类中声明为虚函数,该函数在所有派生基类中自动成为虚函数,无论是否使用virtual关键字。

正确使用 virtualoverride 关键字有助于清晰地表达程序员的意图,并利用编译器检查来避免常见的错误,如签名不匹配导致的非预期的函数重写。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值