虚函数

虚函数介绍

虚函数是面向对象编程中的重要概念,当从父类中继承的时候,虚函数和被继承的函数具有相同的签名。但是在程序运行过程中,系统会自动选择适当的函数进行调用。虚函数是动态绑定的基础。虚函数必须是非静态成员函数。虚函数经过派生后,在类族中就可以实现运行过程中的多态。
根据赋值兼容规则,可以使用派生类的对象代替基类对象。如果用基类类型的指针指向派生类对象来访问它的成员,访问到的只是从基类继承来的同名成员。如果你希望调用的是派生类中重新实现的成员函数,那么你只要将基类中的同名函数声明为虚函数就可以了。
一般虚函数成员的声明方法为:

virtual 函数类型 函数名(形参表);

虚函数的声明智能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候。运行过程中的对台需要满足3个条件:

  • 类之间满足赋值兼容规则
  • 声明虚函数
  • 由成员函数来调用或者是通过指针、引用来访问虚函数(如果是通过对象名来访问虚函数,则绑定是静态的,也就是在编译过程中就进行了绑定)。

注意:虚函数一般不声明为内联函数,因为对虚函数的调用需要动态绑定,而对内联函数的处理是静态的,所以虚函数一般以内联函数处理。但将虚函数声明为内联函数也不会引起错误。

示例
#include <iostream>
using namespace std;

class Base
{
public:
    virtual void display() const;
};

void Base::display() const {
    cout << "Base dispaly" << endl;
}

class Base1 : public Base
{
public:
    void display() const;
};

void Base1::display() const {
    cout << "Base1 dispaly" << endl;
}

class Base2 : public Base1
{
public:
    void display() const;
};

void Base2::display() const {
    cout << "Base2 dispaly" << endl;
}

void fun(Base *var) 
{
    var->display();
}

int main (int argc, char *argv[])
{
    Base va;
    Base1 vb;
    Base2 vc;

    fun(&va);
    fun(&vb);
    fun(&vc);

    return 0;
}

运行结果为:

Base dispaly
Base1 dispaly
Base2 dispaly

如果不把基类Base的成员函数display()声明为虚函数,那么程序三次调用的都会是基类Base的display()函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值