OOP或者OOD的概念中,包含有复合composition,委托delegation和继承inheritance三种关系。其中最复杂的就是inheritance。
继承时,子类Derived Class继承的是:
体现inheritance精髓的就是多态了。
这里有几个概念基本是等效的 多态 = 虚函数 = 动态绑定
在汇编语言中,函数的调用是通过CALL指令实现的。
在C++中,根据CALL指令后面的参数,函数的调用分为动态绑定和静态绑定两种。
普通的函数,在编译链接后,就确定了其调用地址。所谓静态绑定,就是函数的地址是在链接阶段确定了,无需等到运行时重新计算。
体现为 call address_xxx
的形式
动态绑定则是在运行时才确定函数的调用地址。在C++中,虚函数的调用就是通过这种方式实现的。
动态绑定技术也被称为多态,即一种函数名称(虚函数名),多种形态(虚函数的实体由不同的子类实现)。
典型的用法是,通过将同一各基类的不同子类的指针放到一组容器中,容器以基类指针为类型,通过指针调用不同子类的虚函数的实现
C++在实现多态时,使用了虚指针vptr+虚表vtable的方式。
动态绑定的调用方式
p为指向对象的指针,最终动态绑定的虚函数被编译为 (*(p->vptr)[n])§;
最后的§表示p作为this指针被传入。
侯捷老师的C++程序设计(II)