C++ 虚函数表

虚函数表

当一个类中声明了虚函数时,这个函数在编译时会被标记为虚函数,并且对应的虚函数表中会为这个类生成一个虚函数表;

当基类指针指向派生类对象时,如果这个函数被调用,实际上调用的是派生类中的函数。这是因为在派生类中,虚函数表被重写了,指针指向了派生类中的对应函数。


```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;
}

相关推荐

  1. C++ 函数

    2024-03-17 17:40:03       47 阅读
  2. c++ | 动态编译|函数函数

    2024-03-17 17:40:03       36 阅读
  3. [c/c++] 关于函数

    2024-03-17 17:40:03       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 17:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 17:40:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 17:40:03       82 阅读
  4. Python语言-面向对象

    2024-03-17 17:40:03       91 阅读

热门阅读

  1. 数据库(一)

    2024-03-17 17:40:03       40 阅读
  2. linux常用命令(二)

    2024-03-17 17:40:03       32 阅读
  3. GDAL for python安装的心酸路

    2024-03-17 17:40:03       41 阅读
  4. SpringBoot程序的核心功能及优点

    2024-03-17 17:40:03       39 阅读
  5. Spring体系架构

    2024-03-17 17:40:03       39 阅读
  6. 【TypeScript系列】缩小类型范围

    2024-03-17 17:40:03       38 阅读
  7. while 循环语句

    2024-03-17 17:40:03       37 阅读
  8. Elasticsearch(14) match_phrase_prefix的使用

    2024-03-17 17:40:03       36 阅读
  9. 策略模式业务实战

    2024-03-17 17:40:03       39 阅读