首页 > 代码库 > 虚函数的工作原理
虚函数的工作原理
c++规定了虚函数的行为,但将实现方法留给了编译器作者。通常,编译器处理虚函数的方法是:
给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针。这种数组称为虚函数表。
虚函数表中存储了为类对象进行声明的虚函数的地址。例如,基类对象包含一个指针,该指针指向基类中的所有虚函数的地址表。
派生类对象将包含一个指向独立地址表的指针。如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址;如果
派生类没有重新定义虚函数,该vtbl将保存虚函原始版本的地址。如果派生类定义了新的虚函数,则该函数的地址也将被添加到vtpl中。
注意:无论类中包含的虚函数是1个还是10个,都只需要在对象中添加一个地址成员,只是表的大小不同而已。
class Scientist{ ... char name[40];public: virtual void show_name(); virtual void show_all(); ... };class Physicist:public Scientist{ ... char field[40]; public: void show_all(); //重定义 virtual void show_field(); //声明新的虚函数 ... };
虚函数的工作原理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。