C++虚函数表
- 电脑硬件
- 2025-07-23 02:12:01

虚函数表
当一个类中声明了虚函数时,这个函数在编译时会被标记为虚函数,并且对应的虚函数表中会为这个类生成一个虚函数表;
当基类指针指向派生类对象时,如果这个函数被调用,实际上调用的是派生类中的函数。这是因为在派生类中,虚函数表被重写了,指针指向了派生类中的对应函数。
```cpp #include <iostream> // 基类 Animal class Animal { public: // 虚函数 speak,可以被派生类重写 virtual void speak() { std::cout << "Animal speaks" << std::endl; } }; // 派生类 Dog,继承自 Animal class Dog : public Animal { public: // 重写基类的虚函数 speak void speak() override { std::cout << "Dog barks" << std::endl; } }; // 派生类 Cat,继承自 Animal class Cat : public Animal { public: // 重写基类的虚函数 speak void speak() override { std::cout << "Cat meows" << std::endl; } }; int main() { // 创建 Animal 类型的指针,指向派生类对象 Animal* animal; // 创建 Dog 对象并将其地址赋给 animal 指针 animal = new Dog(); // 调用虚函数 speak,实际调用的是 Dog 类中的 speak 函数 animal->speak(); // 输出: Dog barks // 创建 Cat 对象并将其地址赋给 animal 指针 animal = new Cat(); // 调用虚函数 speak,实际调用的是 Cat 类中的 speak 函数 animal->speak(); // 输出: Cat meows // 释放内存 delete animal; return 0; }