C++常见面试题 ——虚函数

什么是虚函数

虚函数是指在类中,以virtual说明符进行描述的非静态成员函数

下面是一个虚函数应用的举例。

#include <iostream>

using namespace std;

//基类
class Base {
public:
    Base() = default;
    virtual void print() {
        cout << "Base" << endl;
    }

    virtual ~Base() = default;
};

//派生类
class Derived: public Base {
public:
    Derived() = default;
    void print() override {
        cout << "Derived" << endl;
    }
    ~Derived() = default;
};

class Derived_2: public Base {
public:
    Derived_2() = default;
    void print() override {
        cout << "Derived_2" << endl;
    }
    ~Derived_2() = default;
}

void test(Base *base) {
    base->print();
}

int main()
{
    Base *base1 = new Base();
    test(base1);

    Base *derived1 = new Derived();
    test(derived1);

    Base *derived2 = new Derived_2();
    test(derived2);
}

执行上述代码,可得:

$ ./test_virtual.exe 
Base
Derived
Derived_2

可以看到,在test函数中,对于同一个Base类的指针,入参为base1和base2所执行的print结果是不一样的,base1作为入参时test执行的是基类的print;而derived1作为入参时test执行的却是派生类Derived的print函数。
这就是C++中动态多态的概念(还有一种叫静态多态,是通过模板实现,在编译时实现,故称为静态),即使用基类(上面的Base)的指针(或引用)指向派生类对象,并调用对应的虚函数(上面的print)。这样对于同一个函数(上面的test),通过传入不同的对象,来执行对应对象的print实现。

动态多态(在运行时确定,故称为动态)必须满足两个条件:

  • 必须通过基类的指针或引用调用函数
  • 调用的函数必须为虚函数,并且派生类对基类的虚函数进行了覆写(override)
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值