C++ 几句话彻底点通虚表

devtools/2024/10/22 9:49:49/
#include <iostream>using namespace std;class Base
{
public:virtual void show() // 声明虚函数{cout << "Base" << endl;}
};class Derived : public Base
{
public:void show() override // 覆盖虚函数{cout << "Derived" << endl;}
};int main()
{Base *ptr = new Derived();ptr->show(); // 运行时解析 Q:为什么会输出 Derived ?delete ptr;return 0;
}

这里,调用ptr->show()时的具体步骤为:

  • ptr所指对象的内存开始处读取vptr(虚指针)

  • 使用vptr(虚指针)访问虚表。

  • 在虚表中查找show()函数对应的条目(因为Derived类覆盖了Base类show(),所以虚表里的指针指向Derived::show())。

  • 调用该地址对应的函数(即Derived::show())。

虚表使得C++中的多态成为可能,允许在运行时根据对象的实际类型调用适当的函数。


http://www.ppmy.cn/devtools/6907.html

相关文章

如何理解数据库事务

事务的概念起源于数据库系统的设计和实现。在计算机科学领域中&#xff0c;数据库系统被广泛用于存储和管理大量的数据&#xff0c;而事务的概念则是为了解决多用户并发访问数据库时可能出现的一系列问题。 事务的概念最早由 IBM 的科学家 Edgar F. Codd 在 1970 年提出。Codd…

vue+Element-ui实现模板文件下载

最近实现一个功能&#xff0c;数据过多&#xff0c;录入系统的时候过慢&#xff0c;所以新增一个导入数据的功能。 导入数据的话&#xff0c;为了防止用户随意输入&#xff0c;或者不知道怎么输入&#xff0c;所以特完成模板下载功能。 通常情况下实现模板下载采用a标签即可实现…

mac jd-gui安装

在macOS上安装JD-GUI&#xff08;Java Decompiler GUI&#xff09;是一个简单的过程。JD-GUI是一个独立的图形化应用程序&#xff0c;你可以使用它来查看Java字节码对应的源代码。下面是安装步骤&#xff1a; 下载JD-GUI&#xff1a; 访问JD-GUI的官方网站&#xff08;http://j…

XiaodiSec day034 Learn Note 小迪渗透学习笔记

XiaodiSec day034 Learn Note 小迪渗透学习笔记 记录得比较凌乱&#xff0c;不尽详细 day34 黑盒审计和白盒审计 与 cms 相关 .net java php 代码审计 开始 黑盒&#xff1a;找文件上传的功能 个人用户中心是否存在文件上传功能后台管理系统是否存在文件上传功能字典目录…

深入理解人工智能:从基础到前沿/厾罗

导言&#xff1a; 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了一个家喻户晓的概念。无论是在电影中看到的智能机器人&#xff0c;还是我们日常生活中的智能助手&#xff0c;人工智能的应用已经无处不在。但人工智能究竟是什么&#xff1f;它如…

【数据结构】二叉爆炸

【数据结构】二叉爆炸 按照惯例整点抽象的&#xff0c;贴上这篇博客的名字由来&#xff1a; 言归正传&#xff0c;本篇博客介绍二叉树的构造方式、前中后序遍历、层序遍历以及代码随想录中二叉树章节的相关题目&#xff1a; 代码随想录 (programmercarl.com) 一、啥是二叉树 …

节点加密技术:保障数据传输安全的新利器

随着信息技术的快速发展&#xff0c;网络数据的安全传输问题日益凸显。节点加密技术作为一种新兴的加密手段&#xff0c;正逐渐成为保障数据传输安全的重要工具。本文将探讨节点加密技术的原理、应用及其优势&#xff0c;并分析其未来的发展趋势。 节点加密技术的原理 节点加密…

开发了一个在线客服系统

开发了一个在线客服系统 作为一名程序员&#xff0c;我最近完成了一个激动人心的项目&#xff1a;一个功能全面的在线客服系统。在这个项目中&#xff0c;我使用了Golang作为后端开发语言&#xff0c;MySQL作为数据库&#xff0c;前端则是通过Vue2和ElementUI框架搭建的。 技…