C++多态的核心机制是通过虚函数实现运行时绑定,主要涉及三个关键点:
1. 虚函数重写
- 基类用
virtual声明虚函数,派生类通过override重写实现
class Base {
public:
virtual void show() {
cout << "Base class" << endl;
}
};
class Derived : public Base {
public:
void show() override {
cout << "Derived class" << endl;
}
};
2. 虚表指针(vptr)
- 每个含虚函数的类拥有虚函数表(vtable)
- 对象内存首部隐含
vptr指向对应虚表 $$ \text{对象内存布局} = \begin{cases} \text{vptr} & \text{(4/8字节)} \ \text{成员变量} & \text{(按声明顺序)} \end{cases} $$
3. 动态绑定
- 通过基类指针/引用调用虚函数时:
Base* obj = new Derived();
obj->show(); // 输出"Derived class"
- 运行时根据
vptr→vtable→定位实际函数地址
执行过程解析
- 编译器为每个类生成
vtable$$ \text{Base::vtable} = [ \text{Base::show} ] $$ $$ \text{Derived::vtable} = [ \text{Derived::show} ] $$ new Derived()时构造vptr指向Derived::vtableobj->show()通过vptr[0]调用函数
此机制实现「同一接口,不同行为」的多态特性,是面向对象的核心设计模式。
1067

被折叠的 条评论
为什么被折叠?



