虚函数
虚函数是 C++ 中实现运行时多态的核心机制,允许派生类重写基类的成员函数。
虚函数是使用关键字 virtual 修饰的非静态成员函数。
cpp
class Base {
public:
virtual void foo() { // 使用 virtual 声明
cout << "Base::foo" << endl;
}
virtual ~Base() = default; // 基类析构函数通常设为 virtual
};
class Derived : public Base {
public:
void foo() override { // 可选:显式标记覆盖
cout << "Derived::foo" << endl;
}
};
int main() {
Base* ptr = new Derived();
ptr->foo(); // 输出:Derived::foo(运行时多态)
}虚函数的工作原理
- 每个包含虚函数的类自动生成一个
vftable(虚函数表),表中存放所有虚函数的地址。 - 对象中存储指向虚函数表的指针
vfptr,运行时通过该指针调用对应的虚函数。
cpp
class Base {
public:
virtual void f1();
virtual void f2();
void normal();
};
class Derived : public Base {
public:
void f1() override;
virtual void f3();
};
Base b_obj;
Derived d_obj;
Base* ptr = &d_obj;
ptr->f1(); // -> Derived::f1()
- 获取
vfptr - 索引
vftable - 获取目标函数地址
- 跳转到代码:
Derived::f1()