C++中多态的实现原理 当类中声明虚函数时,编译器会在类中生成一个虚函数表 虚函数表是一个存储类成员函数指针的数据结构 虚函数表是由编译器自动生成与维护的 virtual成员函数会被编译器放入虚函数表中 存在虚函数时,每个对象中都有一个指向虚函数表的指针VPTR 每一个类都会由编译器自动生成一个虚函数表,而且每个类只有唯一一个表。此类生成的每一个对象里面都隐含着一个指向该表的指针。 调用虚函数时,会通过VPTR指针指向的虚函数表中查询该函数,找到入口地址,并调用。这个过程相对比较耗时,因此执行效率相对比较低,因此,没有必要把所有的函数都设计为虚函数。 对象在创建的时候由编译器对VPTR指针进行初始化 只有当对象的构造完全结束后VPTR的指向才最终确定 父类对象的VPTR指向父类虚函数表 子类对象的VPTR指向子类虚函数表 构造函数中调用虚函数无法实现多态。
转载请注明原文地址: https://www.6miu.com/read-62175.html