《C++捷径教程》学习笔记【一】:虚函数

声明虚函数的方法是在基类中的成员函数原型前加上关键字virtual.格式如下:

    class 类名{

    ……

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

    ……

    };

    当一个类的成员函数声明为虚函数后,这就意味着该成员函数在派生类中可能有不同的实现,也就是说,该函数在派生类中可能需要定义与其基类虚函数原型相同的函数。

    虚函数是动态联编的基础,当用基类类型的指针或引用的方法指向不同派生类对象时,系统会在程序运行中根据所指向对象的不同自动选择适当的函数,从而实现了运行时的多态性。

    当通过基类指针或引用标识对象并调用成员函数时,由于基类指针可以指向该基类的不同派生类对象,因此存在需要动态联编的可能性,但具体是否使用动态联编,还要看所调用的是否是虚函数。

    虚函数可以在一个或多个派生类中被重新定义,但它要求在派生类中重新定义时必须与基类中的函数原型完全相同,包括函数名、返回值类型、参数个数和参数类型的顺序。

    只有类的成员函数才能声明为虚函数,但类的构造函数以及全局函数和静态成员函数不能声明为虚函数。

 

描述多态时,我们常用这样的话:“一种接口,多种方法”。

虚函数和一般函数(早绑定与晚绑定):绑定的英文名为binding:把函数体和函数调用相联系称为绑定。
类中的一般的函数都是早绑定,也就是说:在调用的地方,就已经把要调用的函数确定好了,调用的类就是定义它的类。

多态的时候,都是用晚绑定,比如你的父类中定义了virtual的方法,那么这个方法可能会在你的子类中重载,具体你用什么子类,是变量申明时所不知道的,在C++编译器会在编译的时候为这些类加上一个指针,指针指向一个虚表,虚表中存在着真实的函数,这个是就是一个晚绑定了

 

早绑定的优点是:

  • 编译效率
  • 代码提示(代码智能感知)
  • 编译时类型检查

晚绑定的优点是:

  • 不用申明类型
  • 对象类型可以随时更改

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值