函数(Virtual Function) 是实现面向对象编程中**多态(Polymorphism)**的核心机制

虚函数是在基类中通过virtual关键字声明的成员函数,允许在派生类中重写(Override)该函数。

目的:通过基类指针或引用调用实际派生类对象的方法,实现运行时多态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Animal {
public:
virtual void speak() { cout << "Animal sound" << endl; } // 虚函数
};

class Dog : public Animal {
public:
void speak() override { cout << "Woof!" << endl; } // 重写基类虚函数
};

int main() {
Animal* animal = new Dog();
animal->speak(); // 输出 "Woof!"(调用派生类方法)
delete animal;
return 0;
}
  • 编译器为每个包含虚函数的类生成一个虚函数表(vtable),存储虚函数地址。
  • 对象的内存布局中包含指向vtable的指针(vptr),在运行时根据实际对象类型动态调用正确的函数。
虚函数 构造函数
实现运行时多态 初始化对象内存和成员变量
依赖vtable和vptr 负责初始化vtable和vptr
允许派生类重写 每个类必须独立定义,不可继承或重写
通过基类指针/引用调用 直接由对象类型确定调用的构造函数
  • 构造函数不能是虚函数,因其执行时虚函数机制尚未就绪
  • 构造函数的多态性无意义,对象类型在构造时已明确