八股文 c++ 多态

静态多态

静态多态(编译时多态):主要体现在函数重载(Overloading)和运算符重载上,编译器根据函数签名在编译阶段就能确定调用哪个函数。

动态多态

动态多态(运行时多态):是指程序直到运行时才能确定所调用的具体方法,这是通过虚函数机制实现的。动态多态的核心在于基类与派生类的关系以及虚函数的使用。

当一个类声明了虚函数(使用virtual关键字),C++编译器会为该类创建一个虚函数表(Virtual Function Table,VTable)。
每个含有虚函数的类的对象内部都隐含一个指向其对应虚函数表的指针(VPTR,也称为vtable指针),通常是在对象内存布局的开始部分。
在派生类中,如果覆盖了基类的虚函数,则派生类的虚函数表中对应的函数指针将指向派生类的实现。
当通过基类指针或引用调用虚函数时,实际上会通过这个隐藏的VPTR找到正确的虚函数表,并根据虚函数表中的条目来调用实际对象对应的方法,这就是所谓的“动态绑定”。
定义基类并声明虚函数。
派生类继承基类,并重写(override)虚函数。
创建派生类对象,并将其地址赋给基类指针。
通过基类指针调用虚函数,此时调用的是派生类中重写后的版本。
总结来说,动态多态在C++中是通过虚函数表和VPTR机制,在运行时根据对象的实际类型而不是声明类型来决定调用哪个成员函数,从而实现了灵活而强大的多态性

C++函数隐藏

隐藏(Name Hiding): 当基类中有一个非虚函数,并且派生类中也有一个同名函数(即使参数列表完全相同),此时派生类并不会覆盖基类的函数,而是隐藏了基类的这个函数。这意味着通过派生类对象或引用直接调用该函数时,将调用派生类的版本;但如果通过基类指针调用,则会调用到基类的版本,而不会考虑派生类是否重载了该函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610638.shtml

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

相关文章

leetcode 659. 分割数组为连续子序列

题目链接:leetcode 659 1.题目 给你一个按 非递减顺序 排列的整数数组 nums 。 请你判断是否能在将 nums 分割成 一个或多个子序列 的同时满足下述 两个 条件: 每个子序列都是一个 连续递增序列(即,每个整数 恰好 比前一个整数…

1881_S32K344开发工具以及MCAL软件安装

全部学习汇总: GreyZhang/g_s32k344: A new MCU learning notes. I would try to use MCAL instead of SDK. (github.com) 编译有专门的编译器安装包,也有IDE的安装形式。这里我选择了IDE,因为我还需要一个开发调试环境。这个IDE可以让我方便…

使用cURL命令在Linux中测试HTTP服务器的性能

cURL是一个强大的命令行工具,用于从或向服务器传输数据。它支持多种协议,包括HTTP、HTTPS、FTP等。在Linux系统中,cURL可以用于测试和评估HTTP服务器的性能。下面是一些使用cURL命令测试HTTP服务器性能的示例和说明。 1. 基本请求 要向指定…

MySQL8下载安装教程

一、MySQL下载 我的版本是8.2.0,当前的最新版本,网址如下:MySQL :: Download MySQL Community Server 点击No thanks,just start my download,就是只是开始下载的意思,点击下载,等待下载完成 二…

ylov8的训练和预测使用(目标检测)

首先要配置文文件 1-配置数据集的yaml文件: 目录在ultralytics/cfg/datasets/下面: 例如我的: (这里面的yaml文件在/ultralytics/cfg/datasets下面有很多,可以找几个参考一下) path: /path/to/eye_datasets # dataset root di…

java基础之Java8新特性-方法引入

目录 1.简介 2.方法引入 方法引入遵循规范 方法引入种类 1.静态方法引入 2.对象方法引入 3.实例方法引入 4.构造函数引入 1.简介 方法引用是 Java 8 中引入的另一个重要特性,它提供了一种简洁的语法来直接引用现有方法或构造函数。方法引用可以看作是 Lambd…

【Python机器学习】决策树集成——梯度提升回归树

理论知识: 梯度提升回归树通过合并多个决策树来构建一个更为强大的模型。虽然名字里有“回归”,但这个模型既能用于回归,也能用于分类。与随机森林方法不同,梯度提升采用连续的方式构造树,每棵树都试图纠正前一…

【Verilog】期末复习——设计11011序列检测器电路

系列文章 数值(整数,实数,字符串)与数据类型(wire、reg、mem、parameter) 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…

nginx反向代理websocket 60秒自动断开处理

参考: https://blog.csdn.net/zqh123zqh/article/details/112795608 添加: proxy_read_timeout 600s; 例如: server {listen 80;server_name carrefourzone.senguo.cc;#error_page 502 /static/502.html;location /static/ {root /home/ch…

功能分享【电商API接口】:商品采集正确使用方法!

相信很多做过电商的人,曾经有在淘宝、京东、天猫、拼多多、1688等平台上卖过自己的产品,但是每换一个平台,商品要重新上传,这浪费了很多没有必要的时间。 为此我们开发了商品采集API功能,一键完成上架商品&#xff0c…

2024年江苏省职业院校技能大赛高职学生组软件测试任务四 单元测试题目

2024年江苏省职业院校技能大赛高职学生组软件测试任务四 单元测试 任务要求 题目1:任意输入2个正整数值分别存入x、y中,据此完成下述分析:若x≤0或y≤0,则提示:“输入不符合要求。”;若2值相同&#xff0…

CHS_01.1.5+操作系统引导

CHS_01.1.5操作系统引导 操作系统的引导一个新的磁盘安装操作系统后操作系统引导(开机过程) 操作系统的引导 我们会学习操作系统的引导 那你可能看见这个词的时候会觉得莫名其妙不明 绝地 什么是操作系统的引导呢 简单来说就是当你在开机的时候 如何让…

消除类游戏(UPC练习)

题目描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被…

频率的高低与辐射强度有关系吗?

摘要: 频率的高低和辐射强度之间存在一定的关系。 一般而言,频率越高,辐射强度越大,即电磁辐射的能量越大。这是因为电磁波的能量与其频率成正比。在电磁波谱中,如X光和伽玛射线具有高频率和强辐射强度,可以破坏构成 .…

番外篇 中国古代的操 作系统

番外篇中国古代的操作系统 在古代中国,仿佛已经存在一套古老而神秘的操作系统机制。 这个东方国度中,有一位名叫小李子的忙碌人物,他的工作就如同是执行各种指令的“人肉CPU”。 这个国家还有一个特殊的人物,即皇帝,他…

1.4.1机器学习——梯度下降+α学习率大小判定

1.4.1梯度下降 4.1、梯度下降的概念 ※【总结一句话】:系统通过自动的调节参数w和b的值,得到最小的损失函数值J。 如下:是梯度下降的概念图。 我们有一个损失函数 J(w,b),包含两个参数w和b(你可以想象成J(w,b) w*x…

服务器配置SSL证书到nginx基于Fdfs存储服务器或者直接阿里云绑定SSL

1.如果用FDFS存储服务器内置nginx设置SSL证书 1.验证当前nginx是否存在 http_ssl_modulehttp_ssl_module模块 如果存在直接配置就行 server {listen 80 default backlog2048;listen 443 ssl; server_name 域名; ssl_certificate /usr/local/nginx_fdfs/ssl/xxxx.top.crt; ssl…

leetcode滑动窗口问题总结 Python

目录 一、理论 二、例题 1. 最长无重复字符串 2. 长度最小的子数组 3. 字符串的排列 4. 最小覆盖子串 5. 滑动窗口最大值 一、理论 滑动窗口是一类比较重要的解题思路,一般来说我们面对的都是非定长窗口,所以一般需要定义两个指针 left 和 right&…

Unity报错:[SteamVR] Not Initialized (109)的解决方法

问题描述 使用HTC vive 头像进行SteamVR插件的示例场景进行测试,发现头显场景无法跳转到运行场景(Unity 项目可以运行,仅出现警告)。 具体如下: [SteamVR] Not Initialized (109) [SteamVR] Initialization failed…

面试宝典之消息中间件面试题

RabbitMq: 1、RabbitMQ有啥用处? (1)服务间异步通信 (2)顺序消费 (3)定时任务 (4)请求削峰 2、RabbitMQ有哪些常用的工作模式? 工作模式(Work…