前言
C++的多态性与动态绑定是分不开的,本篇文章将通过代码实例来介绍c++语言的动态绑定。以下是本篇文章正文内容,下面案例可供参考
一、什么是动态绑定?
函数运行的版本不是一开始就确定好了的而是在程序运行的时候才选择函数运行的版本,至于到底选择哪个函数版本取决于调用该函数的指针或者引用实际绑定的数据对象,讲的通俗一点就是你所看到的跟实际运行的结果可能不一致。
二、动态绑定发生的条件?
只有当我们通过指针或者引用去调用一个虚函数的时候才会发生动态绑定。三个关键字:“指针”,“引用”,“虚函数”。
三、动态绑定的实际意义?
我们都知道c++语言支持面向对象编程,多态性是面向对象编程的三大特征之一,其实动态绑定是c++支持多态性的根本原因。为什么这么说呢?在c++语言中我们常用一个基类的指针或者引用去指向一个派生类对象,当我们通过基类的指针或者引用调用虚函数时,实际运行的虚函数版本取决于该基类指针或者引用绑定的真实数据类型(可能是派生类对象也可能是基类对象本身)。
四、实例程序
1.主要代码
代码如下(示例):
2.运行结果
结果如下(示例):
3.结果解析
。(1)ptrA->fun(); 我们是通过一个基类指针去调用一个虚函数,此时就会发生动态绑定,那么最后实际运行的fun函数版本取决于ptr指针实际绑定的数据对象,此时ptr指向的是objB也就是派生类的对象,所以最后实际调用的是派生类B中的fun函数。(2)ptrA->fun1(); 我们是通过一个基类指针去调用一个非虚函数,此时不会发生动态绑定,那么最后实际运行的fun1函数版本就是ptr指针的静态类型A对应的版本。(3)objA->fun(); 我们是通过一个基类对象去调用一个虚函数,此时不会发生动态绑定,那么最后实际运行的fun函数版本就是objA静态类型A对应的版本。(4)objA->fun1(); 我们是通过一个基类对象去调用一个非虚函数,此时不会发生动态绑定,那么最后实际运行的fun1函数版本就是objA静态类型A对应的版本。
当我们通过基类的引用来调用虚函数或者非虚函数时产生的结果跟通过基类指针调用一样,在此我不再赘述。