【寒江雪】C++类的多态性

来源:互联网 发布:戴墨镜抽烟软件 编辑:程序博客网 时间:2024/05/19 20:21

静态联编的多态性

函数重载的实现原理

  函数重载出现在同一个作用于中的多个函数中,函数具有相同的名字,不同的参数列表。
  函数重载不受返回值类型影响。函数签名只由名字和参数列表决定。
  函数重载是发生在编译阶段完成的,在声明函数的时候,编译器根据符号命名规则,生成函数符号。在发生调用的地方,根据同样的规则来生成调用符号,调用相应的函数。如果匹配失败,编译器就会报编译时错误。

 运算符重载

  运算符重载可以算是特殊的函数重载形式,在语法上,它的要求会多一些,比如参数个数的限制等。
 &esmp;但追究其本质与函数重载是一样的.

动态联编的多态性

虚函数

  虚函数的实现是通过在类当中保存有一个虚函数表。在编译生成类对象的时候,会在类对象的首地址开始处生成一个虚函数表,该表格由一个二维指针指向首地址,第一维表示的是继承链,如果不涉及多继承的时候,第一维偏移量都是零。第二维将保存继承链中的每一层中的虚函数。在调用的时候只需要查表找到相应的函数指针调用即可。

动态绑定的实现方式

  动态绑定指的是基类指针指向派生类对象的时候,调用基类虚方法时,如果派生类覆盖了该方法,会调用派生类的实现。
  实现动态绑定的原理就在于虚函数表,当基类指针获得派生类对象的地址的时候,调用虚方法时会检查虚函数表,如果派生类已经覆盖了该方法,则在虚函数表中相应的偏移位置上的地址为派生类重写的方法的地址,在内部取得该地址并调用,就相当于调用了派生类重新实现的方法。


Copyright© by 寒江雪1719
Date:2017.8.5
积跬步,致千里

原创粉丝点击