C++ 多态
多态(Polymorphism)是面向对象编程的三大核心特性(封装、继承、多态)之一。它允许使用统一的接口来处理不同的派生类对象,从而在运行时根据对象的实际类型来调用相应的方法。1、原理
虚函数表 (vTable) 和虚函数指针 (vPtr)
[*]虚函数 (Virtual Function): 使用 virtual 关键字声明的成员函数。派生类可以重写(override)它。
[*]虚函数表 (vTable): 编译器为每个包含虚函数的类自动生成一个隐藏的、静态的函数指针数组。表中按顺序存放该类所有虚函数的地址。
[*]如果派生类重写了基类的虚函数,则派生类的 vTable 中对应项更新为派生类函数的地址。
[*]如果派生类定义了新的虚函数,这些新虚函数的地址会被追加到 vTable 的末尾。
[*]虚函数指针 (vPtr): 编译器在每个包含虚函数的类的对象中自动添加一个隐藏的指针成员(通常是对象的开头位置)。这个 vPtr 指向该类对应的 vTable。
2、内存模型与工作原理
class Base {public: virtual void func1() { cout
页:
[1]