C++多态

来源:互联网 发布:音乐跳动软件 编辑:程序博客网 时间:2024/05/16 15:58

一、多态

       C++多态通过继承和动态绑定实现。继承是一种代码或者功能的传承共享,从语言的角度它是外在的、形式上的,极易理解。而动态绑定则是从语言的底层实现保证了多态的发生——在运行期根据基类指针或者引用指向的真实对象类型确定调用的虚函数功能!通过带有虚函数的单一继承我们可以清楚的理解继承的概念、对象模型的分布机制以及动态绑定的发生,即可以完全彻底地理解多态的思想。为了支持多态,语言实现必须在时间和空间上付出额外的代价(毕竟没有免费的晚餐,更何况编译器是毫无感情):

      1、类实现时增加了virtual table,用来存放虚函数地址;

      2、类对象中增加了指向虚函数表的指针vptr,以提供runtime的链接;

      3、在类继承层次的构造函数中重复设定vptr的初值,以期待指针指向对应类的virtual  table;

      4、在类继承层次的析构函数中重复还原vptr的初值;

      5、多态发生时(base class指针调用虚函数)需要通过vptr和virtual table表调用对应函数实体,增加了 一层间接性。

      第1、2两点是多态带来的空间代价,后面三点则是时间效率上的代价。


参见inside C++ object model

0 0
原创粉丝点击