c++的多态,继承,抽象类,虚函数表,虚函数等题目+分析
目录
题目
代码题
分析
主观题
题目
代码题
class A { public:virtual void func(int val = 1) {std::cout << "A->" << val << std::endl;}virtual void test() { func(); } };class B : public A { public:void func(int val = 0) { std::cout << "B->" << val << std::endl;} };int main(int argc, char* argv[]) {B* p = new B;p->test();return 0; }
A: A->0 B: B->1 C: A->1 D: B->0 E: 编译出错 F: 以上都不正确
分析
p调用了B中的test(),传入B的this指针
- 但test()在B中没有,它是A中的函数,且没有被重写,所以需要去A中寻找
- 而调用A中函数需要使用A类型的this指针,所以B类型的this指针被转换为A类型的
- 而调用了test()后,里面又会调用func()
- 别忘了,这里的this指针实际还是指向B的(只是指在了B中的A部分)
- 所以,根据多态性,调用了B中的func,所以要打印B->
- 注意这里的val
- 多态实际上是使用了基类中函数的声明+子类中该函数的定义
- 所以!!!val的值是A中的1(int val = 1)
- 所以最后结果是B->1
主观题
1. 什么是多态?
多态 -- 完成同一个动作,根据指针/引用实际指向的对象类型,来调用函数
2. 什么是重载、重写(覆盖)、重定义(隐藏)?
- 重载 -- 在同一作用域下,两个函数的名字相同,但参数列表/返回值不同
- 重定义/隐藏 -- 在继承关系中,父类和子类都有一个同名函数,无论参数如何,都会构成隐藏,优先调用子类的函数
- 重写/覆盖 -- 在继承关系中,父类和子类都有一个相同的虚函数(同名,同参数,同返回值),就说子类的该函数重写了父类的该函数 ; 当使用父类的指针/引用调用该函数时,会实际调用子类中的
3. 多态的实现原理?
虚函数+虚函数表+运行时多态性
- 虚函数 -- 可以在派生类中被重写
- 虚表 -- 存储类中虚函数的指针
- 运行时多态性 -- 实现运行时可以根据实际对象调用对应函数
4. inline函数可以是虚函数吗?
可以
- 但内联函数原本是不生成地址的,直接在调用处展开代码
- 而虚函数需要将地址存入虚表
- 所以一旦成为虚函数,就会失去内联的特性
5. 静态成员可以是虚函数吗?
不可以
- 静态成员属于整个类,调用时直接使用类域即可
- 但虚函数调用需要传入this指针(需要this指针来找到该对象的虚表,在里面寻找虚函数),而静态成员没有this指针
6. 构造函数可以是虚函数吗?
不可以
- 因为构造函数是用来初始化对象的,包括设置对象的虚表指针,而虚函数的调用依赖于虚表指针
- 所以虚表和虚函数的机制依赖于已经正确初始化的对象 -- 构造函数->虚表指针->虚函数
- 如果构造函数是虚函数,那么调用的时候需要依赖虚表找到虚函数,但虚表又是在构造函数之后才能创建好
- 那么这个先后顺序就很迷惑了,所以不可以是虚函数
7. 析构函数可以是虚函数吗?什么场景下析构函数是虚函数?
当然可以
- 编译器会对析构函数的函数名做处理,从而达到虚函数的条件
- 场景 -- 当需要使用基类类型的指针/引用指向派生类,而没有其他方法析构该派生类时(防止内存泄漏)
8. 对象访问普通函数快还是虚函数更快?
普通函数更快
- 因为虚函数需要在运行时,根据类型 -> 去对象中找虚表 ->在虚表中找虚函数
- 而普通函数直接jmp到函数地址即可
9. 虚函数表是在什么阶段生成的,存在哪的?
- 编译阶段生成
- 存在常量区
10. C++菱形继承的问题?虚继承的原理?
一个派生类对象中,会存储两份共同基类,造成数据冗余+二义性问题
虚继承 :
- 将基类声明成虚基类,该类在派生类中只存在一份
- 会在包含它的派生类中,存放一份虚基表,使可以通过该表中存放的偏移量来访问基类
11. 什么是抽象类?抽象类的作用?
- 抽象类 -- 包含纯虚函数的类(纯虚函数 -- 在基类中的虚函数后加上=0)
- 作用 -- 定义一个通用的接口,然后由具体的派生类来实现这个接口以提供不同的行为
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
c++的多态,继承,抽象类,虚函数表,虚函数等题目+分析
目录 题目 代码题 分析 主观题 题目 代码题 class A { public:virtual void func(int val 1) {std::cout << "A->" << val << std::endl;}virtual void test() { func(); } };class B : public A { public:void func(int val 0) { std…...
![](https://img-blog.csdnimg.cn/direct/e678d5c05144448f9c9233bf292616a1.gif)
利用 Qwen-VL 进行私有化部署第一个 AI 多模态大模型
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...
![](https://img-blog.csdnimg.cn/img_convert/e6ae0e574692afd8d26f4e630b566179.jpeg)
王思聪隐形女儿曝光
王思聪"隐形"女儿曝光!黄一鸣独自面对怀孕风波,坚持生下爱情结晶近日,娱乐圈掀起了一场惊天波澜!前王思聪绯闻女友黄一鸣在接受专访时,大胆揭露了她与王思聪之间的爱恨纠葛,并首度公开承认&#…...
![](https://img-blog.csdnimg.cn/direct/48c2b91977bb472696d05a5d84a5013e.png)
学习笔记——网络管理与运维——SNMP(SNMP原理)
四、SNMP原理 SNMP的工作原理基于客户端-服务器模型。其中,网络管理系统是客户端,而网络设备是服务器。客户端向服务器发送请求消息(即"Get"或"Set"命令)来获取或修改服务器的信息。服务器收到请求消息后,会返回相应的响…...
![](https://img-blog.csdnimg.cn/direct/a7f822f26e9540a4a143d45b20df6f33.jpeg)
基于STM32和人工智能的自动驾驶小车系统
目录 引言环境准备自动驾驶小车系统基础代码实现:实现自动驾驶小车系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景:自动驾驶应用与优化问题解决方案与优化收尾与总结 1. 引言 随着人工智能和嵌入式系统技术的…...
![](https://img-blog.csdnimg.cn/direct/a8ce7b2fee544c348e316d1cb7347d0d.png)
简单介绍vim
文章目录 前言一、Vim的特点二、安装Vim三、设置Vim配置文件的位置:编辑配置文件:添加配置选项:保存并退出编辑器:快速配置验证设置: 总结 前言 Vim是一款强大的文本编辑器,被广泛用于各种编程和文本编辑任…...
![](https://www.ngui.cc/images/no-images.jpg)
使用本地数据对transformers模型进行微调训练
模型 transformers模型是使用比较多的模型,奈何各个都是体积大,找了一个使用人多不是很大的模型进行训练。 需要魔法 bert-base-uncased模型仓库地址 huggingface下的所有仓库都是git的,也就意味着你可以使用 git clone 可以下载仓库内所有的…...
![](https://www.ngui.cc/images/no-images.jpg)
Java面试题:讨论何时需要创建自定义异常类,并展示如何实现一个自定义异常
在Java中,创建自定义异常类的目的是为了更加清晰和有意义地表示特定的错误情况,增强代码的可读性和可维护性。以下是一些需要创建自定义异常类的常见场景以及如何实现一个自定义异常。 何时需要创建自定义异常类 特定业务逻辑错误: 当业务逻…...
![](https://img-blog.csdnimg.cn/direct/bc72edf7b4b54ec79dc4a0ad6da9494f.gif)
什么是进程
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在了解进程之前,我们需要知道多任务的概念。多任务,顾名思义,就是指操作系统能够执行多个任务。例如,…...
![](https://img-blog.csdnimg.cn/img_convert/73190caa52e577e549a15690b8837614.jpeg)
电脑提示d3dcompiler_47.dll丢失的解决方法,实测靠谱的5种方法
在计算机使用过程中,缺失d3dcompiler_47.dll这一系统文件是一个常见问题,尤其是对于游戏和图形密集型应用程序用户来说尤为重要。这个文件是DirectX软件工具包的一部分,主要用于处理图形渲染的应用程序接口的核心元素。当你在运行游戏或某些软…...
![](https://img-blog.csdnimg.cn/f27819dd57a446f2b71867a8f357bfb7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5omn5b-15pap6ZW_5rKz,size_20,color_FFFFFF,t_70,g_se,x_16)
SQLserver前五讲课堂笔记
第一讲 基本内容 为什么要学习数据库系统?什么是数据库?什么是数据库系统?什么是数据库管理系统?本课程学什么以及学到什么程度? 重点难点 一组概念的区分:数据库、数据库系统和数据库管理系统熟悉表 的相关要素及术语熟悉数据库系统的构成(工作…...
![](https://img-blog.csdnimg.cn/direct/73fb90b3b93b42e8872f048628762af2.png)
深度学习项目十六:根据训练好的权重文件推理图片--YOLO系列
文章目录 根据训练好的权重文件推理图片--YOLO系列一、自己构建YOLOv5推理代码1.1 对数据集进行模型训练1.2 对数据集进行模型推理检测1.3 自己编写推理函数1.3.1 针对单张进行推理1.3.2 针对文件夹下的图片进行推理二、自己构建YOLOv8推理代码2.1 对数据集进行模型训练2.2 对数…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
敏感信息加密操作,让开发的系统更加的安全可靠!!
敏感信息加密操作,让开发的系统更加的安全可靠!!Jasypt(Java Simplified Encryption)是一个开源的Java库,用于简化加密操作。https://mp.weixin.qq.com/s/sPBV8Ej46YJsElImodRjAQ...
![](https://img-blog.csdnimg.cn/direct/6353af49e70f44629b476cd274e9e746.png)
第四篇:精通Docker构建:Dockerfile的艺术与策略
精通Docker构建:Dockerfile的艺术与策略 1. 开篇:探索Docker的革命 在探讨我们的主题之前,让我们先回顾一下Docker的概念。Docker是一个开源平台,用于自动化应用程序的部署、扩展和管理,这一切都是在轻量级的容器中进…...
![](https://img-blog.csdnimg.cn/direct/4789ee13f90b4fddbe47c613e56f37ba.png)
Linux下Cmake安装或版本更新
下载Cmake源码 https://cmake.org/download/ 找到对应的版本和类型 放进linux环境解压 编译 安装 tar -vxvf cmake-3.13.0.tar.gz cd cmake-3.13.0 ./bootstrap make make install设置环境变量 vi ~/.bashrc在文件尾加入 export PATH/your_path/cmake-3.13.0/bin:$PAT…...
![](https://www.ngui.cc/images/no-images.jpg)
人工智能体验工程师面试
在面试人工智能体验工程师时,面试官可能会从多个方面来考察候选人的能力和经验。以下是人工智能体验工程师面试题: 基础知识考察: 请简述人工智能、机器学习和深度学习的关系与区别。请解释神经网络的基本原理,以及它在人工智能中的应用。描述一种你熟悉的深度学习模型,并…...
![](https://img-blog.csdnimg.cn/direct/08af73c1f99647d9ae1236a7050ecff8.png)
科研——BIBM论文修改和提交
文章目录 引言投递流程Latex翻译流程latex模板使用bib文件正文修改 反馈时间线等待审稿结果 引言 第一轮投递快结束了,这里得加快进度,二十号截至,这里得在截至之前投一下,这里翻译整理一下投递的流程 投递流程 投递链接论文是…...
![](https://img-blog.csdnimg.cn/direct/a5d0e32fd56243359d8ca8ae96732790.png)
【bug】配置SpringCloudAlibaba AI的maven依赖问题
问题描述 尝鲜alibaba的ai模块,maven依赖一直报找不到包,报错如下 Unresolved dependency: org.springframework.ai:spring-ai-core:jar:0.8.1原因分析: 由于是按照官方文档配置的,所以检查了很多遍maven配置,加上去…...
![](https://www.ngui.cc/images/no-images.jpg)
人工智能和机器学习的应用日益广泛,在医疗健康领域的具体应用是什么?
人工智能(AI)和机器学习(ML)在医疗健康领域的应用日益广泛,涵盖了从疾病预测、辅助诊断、药物研发到健康管理等多个方面。以下是一些具体的应用实例和成功案例: 疾病预测与辅助诊断:机器学习算…...
![](https://img-blog.csdnimg.cn/direct/425c3c414a204be6b6d03bc2e4ff83ea.gif)
前端:鼠标点击实现高亮特效
一、实现思路 获取鼠标点击位置 通过鼠标点击位置设置高亮裁剪动画 二、效果展示 三、按钮组件代码 <template><buttonclass"blueBut"click"clickHandler":style"{backgroundColor: clickBut ? rgb(31, 67, 117) : rgb(128, 128, 128),…...
![](https://img-blog.csdnimg.cn/direct/ae8e0c6e5e874c859a735c66c72ebc67.png)
【计算机网络体系结构】计算机网络体系结构实验-DNS模拟器实验
一、DNS模拟器实验 拓扑图 1. 服务器ip 2. 服务器填写记录 3. 客户端ip以及连接到DNS服务器 4. ping测试...
![](https://img-blog.csdnimg.cn/direct/8e093e791e244a55bdcbf1755a07ad0d.png)
【profinet】从站开发要点
目录 0、常见缩写及关键字注释 1、profinet简介 2、profinet协议栈 3、profinet数据帧 4、profinet网络解决方案示例 5、Application areas 注:本文主要简述profinet从站开发涉及到的知识点。【不足之处后续慢慢补充】。 0、常见缩写及关键字注释 MRP: Media…...
![](https://www.ngui.cc/images/no-images.jpg)
浮点数的进制转换
浮点数的进制转换涉及到将十进制(基数为10)的浮点数转换为其他进制(如二进制、八进制、十六进制等)。以下是将十进制浮点数转换为其他进制的基本步骤: ### 1. 分离整数部分和小数部分: 将浮点数分为整数部…...
![](https://img-blog.csdnimg.cn/direct/4aa3b77912df41519b3fb3cafeac7fb4.png)
vue-饼形图-详细
显示效果 代码 <template> <div style"height: 350px;"> <div :class"className" :style"{height:height,width:width}"></div> </div> </template> <script> import * as echarts from echarts; req…...
![](https://img-blog.csdnimg.cn/direct/e9c0ce7580fb4b9ab643f3f1addd61da.png)
MySQL-备份+日志:介质故障与数据库恢复
目录 第1关:备份与恢复 任务描述 相关知识 MySQL的恢复机制 MySQL的备份与恢复工具 …...
![](https://img-blog.csdnimg.cn/direct/8671d64b2ced49aeb47c74c7f63f8297.png)
嵌入式开发十八:USART串口通信实验
上一节我们学习了串口通信的基本理论,串口通信是学习单片机的一个重要的一步,非常重要,这一节我们通过实验来学习串口通信的使用,以及串口的接收中断的使用。 一、发送单个字节uint8_t数据或者字符型数据 实现的功能:…...
![](https://img-blog.csdnimg.cn/direct/95b0fe42c1fa4c8381bc4fea79ca2c74.png)
redis复习
redis知识点 redis持久化redis 订阅发布模式redis主从复制哨兵模式redis雪崩,穿透缓存击穿(请求太多,缓存过期)缓存雪崩 redis持久化 redis是内存数据库,持久化有两种方式,一种是RDB(redis dat…...
![](https://img-blog.csdnimg.cn/direct/6676189285d14986a8180b851835c5c9.png#pic_center)
SUSE linux的快照和恢复
snapper用于创建和管理文件系统快照,并在需要时实现回滚,它还可以用于创建用户数据的磁盘备份。snapper使用btrfs文件系统或者精简配置的被格式化成XFS或EXT4的LVM卷。snapper可以通过命令行或YaST来进行管理。 btrfs是一种copy-on-write文件系统&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
【Qt快速入门(六)】- QLineEdit按钮的使用
目录 Qt快速入门(六)- QLineEdit按钮的使用QLineEdit按钮的使用QLineEdit的基本用法1. 创建和设置文本2. 获取输入文本3. 清空输入文本 文本处理1. 选择文本2. 设置光标位置3. 撤销和重做 输入验证1. 输入掩码2. 校验器3. 输入限制 样式设置1. 设置字体和…...
![](https://www.ngui.cc/images/no-images.jpg)
常用损失函数详解:广泛使用的优化约束方法
各类常用损失函数详解:广泛使用的优化约束方法 今天介绍下损失函数,先介绍下我常用的方法SmoothedL1,它是一个平滑的L1 penalty函数,用于处理约束violation。 标准的L1 penalty函数定义为: L 1 ( x ) { 0 , if x ≤ 0 x , if x > 0 …...
![](/images/no-images.jpg)
网站关键词的选择/如何制作一个网页页面
前言 在执行流中,根据条件执行不同的语句,分支语句,在shell编程中,主要是if、case in的使用,我们一起学习一下 if语句 1、需要分号隔开 if true;thenecho hello world fi 由于true命令的退出状态码为0,所…...
佛山新网站制作特色/yandex搜索引擎
文章目录透明边框多重边框box-shadowoutline outline-offset边框内圆角背景定位background-positionbackground-origin条纹进度条不规则卡片圆和椭圆四边形切角效果使用一个div实现进度条空心圆环透明边框 默认情况下,背景的颜色会延伸至边框下层,所以…...
![](https://img-blog.csdnimg.cn/img_convert/290fae30946849ab3b6c675a1db0f7e3.png)
大型网站建设完全教程/搜索引擎营销的成功案例
安装完成Zabbix之后,我们就可以安装Maxserver来实现数据大屏展示了。完成Maxserver安装之后,Zabbix里面的主机将自动同步到Maxserver,将会看到如下的面板。全部主机的运行状态大屏每台主机的详细运行大屏pidstat 概述pidstat是sysstat工具的一…...
![](/images/no-images.jpg)
宜黄县建设局网站/百度直播推广
个人觉得Python就声音挺大的,如果选择我肯定会选Java,不仅就业机会多,而且更加适应市场的需求然后对于0基础的来说,选择Python非常的友好,因为他入门比较简单,但是后续的发展说实话确实是不如Javaÿ…...
![](/images/no-images.jpg)
做网站基本流程/人民网疫情最新消息
【来信】老师,我只是一名大专生。找工作很自卑我是2012级专科生,在学校里认真学习。说起我如何考到大专,其实今年中专应届生,通过自主招生考到了这边比较好的3a吧(这也是中专生能考到的最好的学校了,这个学…...
![](https://img-blog.csdnimg.cn/20191231104928700.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R4bTgwOQ==,size_16,color_FFFFFF,t_70)
怎么推广一个网站/网站推广优化c重庆
在项目urls.py里面增加新的路由(精确字符串格式) 在app1下面添加urls.py文件,并将项目的urls.py内容拷贝到该文件,修改如下 在app1.views.py里面增加article方法,如下图 启动服务器,访问http://127.0.0.1:8…...