【面试题笔记】C++继承和多态常见高频经典面试题

1.继承相关习题

1.1 什么是菱形继承?菱形继承的问题是什么?

菱形继承:菱形继承是多继承的一种特殊情况。两个中间类继承父类,而派生类继承了两个中间类,从而在继承关系上呈现出一种菱形。如下图所示:
在这里插入图片描述
**菱形继承的问题:**从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。在Assistant的对象中Person成员会有两份。
在这里插入图片描述

1.2 什么是菱形虚拟继承?如何解决数据冗余和二义性的

**菱形虚拟继承:**虚拟继承可以解决菱形继承的二义性和数据冗余的问题。如下面的继承关系,在Student和Teacher的继承Person时使用虚拟继承,即可解决问题。需要注意的是,虚拟继承不要在其他地方去使用。

class Person{public :string _name ; // 姓名
};class Student : virtual public Person{protected :int _num ; //学号
};class Teacher : virtual public Person{protected :int _id ; // 职工编号
};class Assistant : public Student, public Teacher{protected :string _majorCourse ; // 主修课程
};

**如何解决数据冗余和二义性:**这里是通过两个指针,指向的一张表。这两个指针叫虚基表指针,这两个表叫虚基表。虚基表中存的偏移量。通过偏移量可以找到下面的之前冗余的成员。可以通过下图加深理解。
在这里插入图片描述

1.3 继承和组合的区别?什么时候用继承?什么时候用组合?

继承和组合的区别: 继承允许你根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称为白箱复用(white-box reuse)。术语“白箱”是相对可视性而言:在继承方式中,基类的内部细节对子类可见 。继承一定程度破坏了基类的封装,基类的改变,对派生类有很大的影响。派生类和基类间的依赖关系很强,耦合度高。
对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复用(black-box reuse),因为对象的内部细节是不可见的。对象只以“黑箱”的形式出现。 组合类之间没有很强的依赖关系,耦合度低。优先使用对象组合有助于你保持每个类被封装。
什么时候用继承: 继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。
什么时候用组合: 组合是一种has-a的关系。假设B组合了A,每个B对象中都有一个A对象。

2.多态相关习题

2.1 inline函数可以是虚函数吗?

可以。调用时,如果不构成多态,这个函数保持inline属性。如果构成多态,这个函数就没有inline属性了,因为调用是到对象的虚函数表中找到虚函数地址,实现调用无法使用inline属性。注意:在类中实现的函数默认就是内联函数。

2.2 静态成员可以是虚函数吗?

不能,因为静态成员函数没有this指针,使用类型::成员函数的调用方式无法访问虚函数表,所以静态成员函数无法放进虚函数表。

2.3构造函数可以是虚函数吗?

构造函数成为虚函数没有价值,虚函数的意思是构成多态调用,那么多态调用要去虚函数表中查找。虚函数,对象中虚函数表指针,是在构造函数初始化列表阶段才初始化的。

2.4析构函数可以是虚函数吗?什么场景下析构函数是虚函数?

可以,并且最好把基类的析构函数定义成虚函数。

2.5对象访问普通函数快还是虚函数更快?

如果不构成多态,都是编译器确定调用函数的地址,那么他们一样快。
如果构成多态,那么是虚函数调是运行时去虚函数表中确定函数地址,普通函数编译时直接确定地址,那么普通函数更快。

2.6虚函数表是在什么阶段生成的,存在哪的?

虚函数表是在编译阶段就生成的,一般情况下存在代码段(常量区)的。

2.7程序阅读题1

在这里插入图片描述

2.8程序阅读题2

在这里插入图片描述

2.9程序阅读题3

在这里插入图片描述

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

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

相关文章

ZKP3.2 Programming ZKPs (Arkworks Zokrates)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 3: Programming ZKPs (Guest Lecturers: Pratyush Mishra and Alex Ozdemir) 3.3 Using a library ( tutorial) R1CS Libraries A library in a host language (Eg: Rust, OCaml, C, Go, …)Key type: constraint system Mai…

光伏三相并网逆变器的控制策略与性能分析(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

MySQL基本操作之创建数据表

设计表: 学生表(Student): 学号(StudentID)- 主键,用于唯一标识每个学生姓名(Name)性别(Gender)年龄(Age)出生日期(BirthDate)地址(Address)电话(Phone)邮箱(Email)课程表(Course): 课程号(CourseID)- 主键,用于唯一标识每门课程课程名(CourseNam…

利用Spring Boot框架做事件发布和监听

一、编写事件 1.编写事件类并集成spring boot 事件接口,提供访问事件参数属性 public class PeriodicityRuleChangeEvent extends ApplicationEvent {private final JwpDeployWorkOrderRuleDTO jwpDeployWorkOrderRuleDTO;public PeriodicityRuleChangeEvent(Obje…

基于Java的师生交流答疑管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

攻防世界web篇-Training-WWW-Robots

直接点击给出的地址,然后会转到另一个网页界面,在这个界面,已经给出了提示,robots.txt 在浏览器中,直接在地址的后面加上robots.txt,会进到下面这个界面 因为对php语言一窍不通,所以这里纯粹就…

【数据结构】队列(C语言实现)

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 队列 1. 队列的概念及结构…

搜维尔科技:Varjo-探讨汽车工业使用虚拟现实/XR的可能性

新的 奇亚EV9 被定位为起亚有史以来最豪华的车型。在一次活动中,起亚通过向芬兰媒体、利益相关者和经销商网络推出新的汽车车型(起亚EV9,EV9是一款高度超过5米的全电动车,拥有100千瓦的电池、快速充电能力、2500公斤的拖曳能力和7公斤的座位--这在市场上是一个独特的…

统计不同子序列出现的个数

统计不同子序列出现的个数 在本文中,我们将讨论如何解决一个有趣的问题:给定两个字符串s和t,我们需要统计t在s的子序列中出现的个数。最终的结果需要对 1 0 9 7 10^9 7 1097 取模。 问题描述 我们被要求统计字符串t在字符串s的子序列中…

网站打不开的九个因素

网站打不开的九个因素 1. 服务器软件软件多少、稳定和软件的正确配置,都会影响到服务器环境,以致影响到网络速度。服务器安装软件防火墙,会牺牲一些网络速度,所以VPS、或独立服务器用户装一个防火墙足矣。 2. 机器的配置包括空服…

常见问题-找不到vcruntime140.dll无法继续执行代码解决方案

本文将介绍五种不同的解决方案,帮助大家解决这个问题。 首先,我们需要了解为什么会出现找不到vcruntime140.dll的情况。这种情况通常是由于以下几个原因导致的: 1. 系统环境变量设置不正确:系统环境变量中可能没有包含vcruntime…

jvm的jshell,学生的工具

jshell 在我眼里,只能作为学校教学的一个玩具,事实上官方也做了解释,以下是官方的解释: 在学习编程语言时,即时反馈很重要,并且 它的 API。学校引用远离Java的首要原因 教学语言是其他语言有一个“REPL”…

轻量级导出 Excel 标准格式

一般业务系统中都有导出到 Excel 功能,其实质就是把数据库里面一条条记录转换到 Excel 文件上。Java 常用的第三方类库有 Apache POI 和阿里巴巴开源的 EasyExcel 等。另外也有通过 Web 模板技术渲染 Excel 文件导出,这实质是 MVC 模式的延伸&#xff0c…

nfs+rpcbind实现服务器之间的文件共享

NFS简介 NFS服务及Network File System,用于在网络上共享存储,分为2,3,4三个版本,最新为4.1版本。NFS基于RPC协议,RPC为Remote Procedure Call的简写。 应用场景:用于A,B,C三台机器上需要保证被访问到的文件是一样…

2023阿里云双十一到底有没有活动?去年就没有

2023阿里云双十一到底有没有活动?根据以往经验,阿里云双11是一次大型促销活动,但是去年好像就没有,印象里去年阿里云没推出双十一活动,因为阿里云一直都活动,没有单独推出双11优惠,阿里云百科给…

发现一不错的编程助手 Amazon CodeWhisperer

Amazon CodeWhisperer 是一款 AI 编程助手,旨在为开发人员提供智能化的编程辅助工具。作为一款基于人工智能的编程助手,CodeWhisperer 的目标是提高开发人员的生产效率、降低开发成本,并提供高质量的编程解决方案。 1.安装过程参考官网 htt…

驱动实现LED点灯

demo.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include "head.h" //定义三个指针指向映射后的虚拟内存 unsigned int *vir_moder; unsigned …

YOLOv8改进实战 | 更换主干网络Backbone(四)之轻量化模型MobileNetV3

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

【Qt之布局】QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout介绍及使用

在Qt中&#xff0c;布局管理器&#xff08;Layout&#xff09;用于管理窗口中的控件的位置和大小&#xff0c;以适应不同大小的窗口。 常用的布局管理器包括QVBoxLayout、QHBoxLayout、QGridLayout和QFormLayout。 先放张布局UI&#xff1a; 1. QVBoxLayout&#xff08;垂直布…