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:// 重写基类的虚函数 speakvoid speak() override {std::cout << "Dog barks" << std::endl;}
};// 派生类 Cat,继承自 Animal
class Cat : public Animal {
public:// 重写基类的虚函数 speakvoid 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.mzph.cn/news/749632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue2(四):Vue监测数据的原理(对象,数组),Vue.set的使用方法

一、更新时的一个问题 如果我要点击按钮实现更新冯万宁儿的信息&#xff0c;那么如果一个属性一个属性地改&#xff0c;可以修改成功&#xff0c;并且Vue也会检测到并更新到页面。 但是我如果直接把要修改的信息写在this.persons[0] { id: 001, name: 冯千宁儿, age: 66, se…

Android Studio中快速修改包名

Android Studio中快速修改包名 假设原包名是com.abc.efg&#xff0c; 新包名是com.aaa.bbb 1、点击齿轮图标&#xff0c;把Compact Middle Packages前面的对勾取消&#xff0c;如果没有就忽略此步 2、在左侧项目栏中&#xff0c;选择Android, App-->java-->com,下面可以看…

SpringBoot程序的核心功能及优点

本篇博客主要记录SpringBoot程序的核心功能及优点&#xff1a; 起步依赖&#xff08;简化依赖配置&#xff09; 依赖配置的书写简化就是靠这个起步依赖达成的。 自动配置&#xff08;简化常用工程相关配置&#xff09; 配置过于繁琐&#xff0c;使用自动配置就可以做相应的简化…

教程:如何制作和分享自定义GPT

自定义GPT教程&#xff1a;如何制作和分享 引言 人工智能领域不断发展&#xff0c;引入了改变我们与科技互动方式的创新工具。在这些创新中&#xff0c;自定义生成式预训练变压器&#xff08;GPT&#xff09;的出现尤为引人注目。这些AI模型超越了标准ChatGPT的功能&#xff…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后&#xff0c;经过一年多的等待&#xff0c;YOLOv9终于面世了&#xff01;YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来&#xff0c;该领域的研究者们已经对YOLO进行了多次更…

k8s HPA 自动伸缩机制 (配置,资源限制,)

目录 一、概念 核心概念 工作原理 HPA 的配置关键参数 关键组件 使用场景 注意事项 如何确保程序稳定和服务连续 二、metrics-server 部署 metrics-server 准备 metrics-server 镜像: 使用 Helm 安装 metrics-server: 配置 metrics-server: 安装 metrics-server: …

EOS 与ESD 区别

ESD: 英文&#xff1a;Electrical Static Discharge&#xff1b; 定义&#xff1a;不同静电电位的两个物体之间的电荷转移&#xff1b;中文释为静电放电。静电是一种客观的自然现象&#xff1b; EOS&#xff1a; 英文&#xff1a;Electrical Over Stress 定义&#xf…

【算法】KY187 二进制数

https://www.nowcoder.com/ta/kaoyan 描述 大家都知道&#xff0c;数据在计算机里中存储是以二进制的形式存储的。 有一天&#xff0c;小明学了C语言之后&#xff0c;他想知道一个类型为unsigned int 类型的数字&#xff0c;存储在计算机中的二进制串是什么样子的。 你能帮帮小…

C++中在定义一个宏的时候要注意什么?

在定义宏时&#xff0c;有一些重要的注意事项需要牢记&#xff0c;以确保代码的正确性、可读性和可维护性。以下是一些关键的建议&#xff1a; 避免副作用&#xff1a;宏只是简单的文本替换&#xff0c;所以它们不会检查是否有变量被多次修改或者是否有潜在的副作用。例如&…

钉钉小程序 - - - - - 如何通过一个链接打开小程序内的指定页面

方式1 钉钉小程序 scheme dingtalk://dingtalkclient/action/open_mini_app?miniAppId123&pagepages%2Findex%2Findex%3Fx%3D%25E4%25B8%25AD%25E6%2596%2587 方式2 https://applink.dingtalk.com/action/open_mini_app?type2&miniAppIdminiAppId&corpIdcorpId&…

spacy进行简单的自然语言处理的学习

自然语言处理基本概念 概念&#xff1a;自然语言处理&#xff0c;是让机器理解人的语言的过程。 作用&#xff1a;通过使用自然语言处理&#xff0c;机器可以理解人的语言&#xff0c;从而进行语义分析&#xff0c;例如&#xff1a;从一句话中判断喜怒哀乐&#xff1b;从一段文…

计算机安全

一、跨站脚本攻击XSS? XSS就是通过在用户端注入恶意的可运行脚本&#xff0c;若服务端对用户的输入不进行处理&#xff0c;直接将用户的输入输出到浏览器&#xff0c;然后浏览器将会执行用户注入的脚本。 获取用户的输入&#xff0c;不用innerHtml,用innerText; 对用户的输入…

Unity类银河恶魔城学习记录10-12 p100 Improve aliments - chill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections…

【每日算法】理论:生成模型基础; 刷题:力扣单调栈

文章目录 一、理论问题1、怎么理解重参数化技术&#xff1f;2、KL散度是什么&#xff1f;3、DDPM4、什么是马尔可夫过程5、GAN模型6、VAE模型 二、力扣回顾-单调栈 一、理论问题 1、怎么理解重参数化技术&#xff1f; 重参数化是神经网络中的一种技术&#xff0c;也可以称之为…

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…

说下你对TCP以及TCP三次握手四次挥手的理解?

参考自简单理解TCP三次握手四次挥手 什么是TCP协议&#xff1f; TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接&a…

VMware的安装和Ubuntu的配置安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、linux是什么&#xff1f;二、基础知识虚拟机 三、安装VMware总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; Linux是一个功能…

Java项目:55 springboot基于SpringBoot的在线视频教育平台的设计与实现015

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 在线视频教育平台分为管理员和用户、教师三个角色的权限模块。 管理员所能使用的功能主要有&#xff1a;首页、个人中心、用户管理、教师管理、课程信…

数据指标体系方法—UJM模型

了解 UJM UJM 模型&#xff0c;全称为 User-Journey-Map 模型&#xff0c;即用户旅途地图。 UJM 模型是用户在使用产品过程中的生命旅程&#xff0c;指用户从首次接触直至下单以及享受产品或服务期间&#xff0c;用户与企业产品或者平台互动的全过程。 用户旅途常常会和用户…

用 bsdtar 做 Linux 全系统迁移 - 最省空间、最灵活的Linux系统迁移方式,但需要那么一点点技巧

&#xff08;首发地址&#xff1a;学习日记 https://www.learndiary.com/2024/03/migrate-linux-with-bsdtar/ &#xff09; 我们在做 Linux 全系统迁移的时候&#xff0c;可以直接备份磁盘或分区&#xff08;如 dd &#xff09;&#xff0c;也可以备份全部文件&#xff08;如…