当前位置: 首页 > article >正文

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


http://www.kler.cn/a/271613.html

相关文章:

  • Git进阶之旅:.gitignore 文件
  • volatile
  • 书生大模型实战营5
  • 第31章 测试驱动开发中的设计模式与重构解析(Python 版)
  • 【MySQL】悲观锁和乐观锁的原理和应用场景
  • 渗透测试之WAF规则触发绕过规则之规则库绕过方式
  • STM32 Simulink 自动代码生成电机控制——霍尔有感六步方波仿真到开发板运行
  • 项目需求:实现 PDF 添加水印,这五种方案送上!
  • 关于分布式微服务数据源加密配置以及取巧方案(含自定义加密配置)
  • ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)
  • linux最佳入门(笔记)
  • 【TB作品】MSP430,单片机,Proteus仿真,单片机通信,串口通信
  • 计算机设计大赛 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正
  • 基于MATLAB的OFDM系统实现
  • 卫生间设计黄金法则!贴心小技巧,让你的卫生间瞬间变宽敞!福州中宅装饰,福州装修
  • Session,Cookie,Token详解,初步认识web程序的安全性
  • HTTP和HTTPS的区别,HTTPS加密原理是?
  • 智能合约概述
  • 游戏服务端配置“热更”及“秒启动”终极方案(golang/ygluu/卢益贵)
  • Maya自定义工具架
  • 服务器硬件基础知识
  • Unix环境高级编程-学习-05-TCP/IP协议与套接字
  • 【正则表达式】正则表达式里使用变量
  • Unity类银河恶魔城学习记录10-13 p101 Improve aliment - shock源代码
  • 豆瓣电影信息爬取与可视化分析
  • 【MySQL】的相关面试题(四)