虚函数和多态
多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。例如:一个父类类型的指针指向一个子类对象的时候,使用父类的指针去调用子类中重写了的父类中虚函数时候,会调用子类重写过的函数,在父类中声明加了virtual关键字的虚函数,在子类中重写的时候不需要加virtual也是虚函数。
虚函数的实现:在有虚函数的类中,类最开始部分是一个虚函数表的指针,这个指针指向一个虚函数表,表中放了虚函数的地址,实际的虚函数在代码段中。当继承了父类的时候也会继承其虚函数表,,当子类重写父类中虚函数的时候,会将其继承到的虚函数表中的地址替换为重新写的虚函数地址。使用了虚函数,会增加访问内存开销,降低效率。
- 虚函数表属于类,类的所有对象共享这个类的虚函数表。
- 虚函数表由编译器在编译时生成,保存在.rdata只读数据段。
被嘲笑过的梦想,总有一天会让你闪闪发光

浙公网安备 33010602011771号