1. 多态的本质与类型体系
在C++面向对象编程中,多态(Polymorphism)是允许不同类对象对同一消息做出不同响应的能力。这种机制通过虚函数(virtual function)实现,使得程序能够在运行时(runtime)根据对象的实际类型调用对应的函数实现。
1.1 静态类型与动态类型
每个C++对象都有两个关键类型属性:
- 静态类型(Static Type):变量声明时的类型,编译时确定
- 动态类型(Dynamic Type):对象实际指向的类型,运行时确定
cpp复制class Base {
public:
virtual void show() { cout << "Base show" << endl; }
};
class Derived : public Base {
public:
void show() override { cout << "Derived show" << endl; }
};
Base* b = new Derived(); // 静态类型Base*,动态类型Derived*
关键提示:多态行为只发生在通过基类指针或引用调用虚函数时,直接通过对象调用不会触发多态。
1.2 虚函数表机制
编译器为每个包含虚函数的类生成虚函数表(vtable),其中包含:
- 类类型信息(RTTI)
- 虚函数地址数组
- 可能的偏移量信息(多重继承时)
对象内存布局示例:
code复制Derived对象内存:
+-------------------+
| vptr (指向Derived的vtable) |
| Base类成员变量 |
| Derived类成员变量 |
+-------------------+
调用虚函数时,实际执行流程:
- 通过对象vptr找到vtable
- 根据函数在声明中的顺序索引vtable
- 调用找到的函数地址
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 多态的实现形式
2.1 覆盖(Override)
派生类重新定义基类虚函数时必须满足:
- 函数签名完全相同
- 基类函数必须是virtual
- 访问权限可以不同(但不推荐)
cpp复制class Animal {
public:
virtual
