虚函数和多态

多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。例如:一个父类类型的指针指向一个子类对象的时候,使用父类的指针去调用子类中重写了的父类中虚函数时候,会调用子类重写过的函数,在父类中声明加了virtual关键字的虚函数,在子类中重写的时候不需要加virtual也是虚函数。

虚函数的实现:在有虚函数的类中,类最开始部分是一个虚函数表的指针,这个指针指向一个虚函数表,表中放了虚函数的地址,实际的虚函数在代码段中。当继承了父类的时候也会继承其虚函数表,,当子类重写父类中虚函数的时候,会将其继承到的虚函数表中的地址替换为重新写的虚函数地址。使用了虚函数,会增加访问内存开销,降低效率。

  1. 虚函数表属于类,类的所有对象共享这个类的虚函数表。
  2. 虚函数表由编译器在编译时生成,保存在.rdata只读数据段。
posted @ 2020-10-08 16:35  gongyc  阅读(220)  评论(0)    收藏  举报