多态的总结

什么是多态?

答:多态是多种形态,是为了完成某种行为时,不同对象会产生不同的形态(结合车票例子解释)

2. 什么是重载、重写(覆盖)、重定义(隐藏)?

答:重载的条件是:在同一作用域下,同名函数的(参数个数,参数类型,参数顺序不同)构成重载。

而重写的条件是:在不同作用域下,(函数名,返回类型,参数列表)均相同,并且是虚函数构成的,叫做重写

最后,重定义只要求不同作用域下,函数名相同的函数叫做重定义。两个基类与派生类的同名函数,不是重写就是重定义

3. 多态的实现原理?

答:多态分为静态多态(编译期间)和动态多态(运行期间)

而静态多态:传不同参数。调用不同函数。自动识别类型,根据函数名修饰规则(比如像函数重载,编译时进行匹配,过了之后,如果走到链接的时候,通过函数名修饰规则去找)去寻找对应的变量

而动态多态:传不同对象,调不同函数。(继承中虚函数重写+父类指针调用)就通过生成虚函数表,做到指向哪个类,就去哪个类的对象的虚函数表找。即指向谁就调用谁

4. inline函数可以是虚函数吗?

答:可以,不过编译器就忽略inline属性,这个函数就不再是inline,因为虚函数要放到虚表中去。

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

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

6. 构造函数可以是虚函数吗?

答:不能,因为对象中的虚函数表指针是在构造函数初始化列表阶段才初始化的

形象地说就是:先有鸡还是先有蛋?调构造函数,如果是虚函数,虚函数的目的就是实现多态,那么实现要多态,你连虚表都没有,你去哪里找虚函数地址?因此对象初始化好了才有虚表,通过虚表找虚函数。

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

答:可以,并且最好把基类的析构函数定义成虚函数。基类只要定义了虚函数,那么派生类的析构函数都会与基类的析构函数构成重写,其中它的内部原理是统一变成一个叫destructor的函数名。来保证对象的正确销毁,做到先释放派生类,再去释放基类的顺序。

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

答:首先得分情况:如果是普通对象,是一样快的。如果是指针对象或者是引用对象,则调用的普通函数快,因为构成多态,运行时调用虚函数需要到虚函数表中去查找。

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

答:虚函数表是在编译阶段就生成的,一般情况下存在代码段(常量区)的。(+多态那篇文章里的证明)

10. C++菱形继承的问题?虚继承的原理?

答:C++的菱形继承会存在二义性和冗余性。

而虚继承就是为了解决上面的问题的:通过一个虚基表,虚基表存的是基类偏移量的表,通过虚基表计算变量在对象里面的地址,再随着地址去访问

11. 什么是抽象类?抽象类的作用?

答:抽象类就是在虚函数后面写=0;抽象类强制重写了虚函数,另外抽象类体现出了接口继承关系。

最后到了本次鸡汤:

 

 

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

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

相关文章

VBA 读取指定范围内的单元格数据,生成csv文件

目录 一. 需求二. 宏代码三. 添加按钮 一. 需求 ⏹有如下表格,现在想在Excel中添加一个按钮 点击按钮之后,读取该表格中的数据,生成csv文件将csv文件输出到和Excel同级目录 二. 宏代码 Application.PathSeparator:路径分隔符Cr…

【Code Agent Benchmark】论文分享No.15:TAU-Bench

论文名称:τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains 论文:https://arxiv.org/abs/2406.12045 机构:Sierra Github 链接:https://github.com/sierra-research/tau-bench# 简介 相比于Swe-ben…

Linux下 使用 SSH 完成 Git 绑定 GitHub

文章目录 1、检查 SSH2、生成 SSH key3、添加 SSH key4、验证绑定是否成功 1、检查 SSH Git Bash 中输入ssh命令,查看本机是否安装 SSH: 2、生成 SSH key (1)输入 ssh-keygen -t rsa 命令,表示我们指定 RSA 算法生…

Java 8 Stream 流操作全解析

文章目录 **一、Stream 流简介****二、Stream 流核心操作****1. 创建 Stream****2. 中间操作&#xff08;Intermediate Operations&#xff09;****filter(Predicate<T>)&#xff1a;过滤数据****1. 简单条件过滤****2. 多条件组合****3. 过滤对象集合****4. 过滤 null 值…

Java——设计模式(Design Pattern)

设计模式&#xff08;Design Pattern&#xff09;是软件开发中针对常见问题的经典解决方案&#xff0c;由 GoF&#xff08;Gang of Four&#xff09;在《设计模式&#xff1a;可复用面向对象软件的基础》一书中归纳为23 种模式&#xff0c;分为三大类&#xff1a;创建型模式、结…

python语法学习

1.python的类的定义 class Memory_Manager: 2.__init__ 方法 __init__ 是类的构造方法&#xff0c;用于初始化类的实例。 self 是类实例的引用&#xff0c;用于访问类的属性和方法。 3.方法定义 类中的方法是类的功能实现&#xff0c;通过 def 定义。 4.if __name__ __ma…

如何屏蔽mac电脑更新提醒,禁止系统更新(最新有效方法)

每次打开Mac电脑时&#xff0c;频繁的系统更新提醒可能会对我们的工作和使用体验造成干扰。为了屏蔽这些更新提醒并禁止系统自动更新&#xff0c;我们可以通过修改Hosts文件来实现。以下是详细步骤和方法&#xff0c;帮助你彻底屏蔽macOS的更新提醒。 系统关闭了自动更新也是…

windows10重装ssh无法下载

问题 windows10重装之后&#xff0c;ssh每次都是由于连接的是流量计数的网络无法下载。 解决方法 https://www.cnblogs.com/zhg1016/p/17353348.html

解决 cursor 中不能进入 conda 虚拟环境

【问题】 遇到一个小问题&#xff0c;我创建的conda 环境在 cmd、powershell中都可以激活&#xff0c;但在pycharm、cursor中却不能激活&#xff1f; 看图 cmd中正常&#xff1a; cursor中不正常&#xff1a; 【解决方法】 cursor 中&#xff0c;打开终端&#xff0c;输入&a…

跨平台三维可视化与图形库.VTK图形库.

1. 科学数据可视化 体绘制&#xff08;Volume Rendering&#xff09; 用于医学影像&#xff08;如CT、MRI&#xff09;、气象数据&#xff08;如云层、流体模拟&#xff09;的三维渲染&#xff0c;支持透明度、光照和颜色映射。 等值面提取&#xff08;Iso-Surfacing&#xff…

【萤火工场GD32VW553-IOT开发板】ADC电压的LabVIEW采集

【萤火工场GD32VW553-IOT开发板】ADC电压的LabVIEW采集 &#x1f50b; 本文介绍了萤火工场 GD32VW553-IOT 开发板通过串口中断查询的方式采集 ADC 电压及温度转换数据&#xff0c;并进一步结合LabVIEW上位机实现数据自动采集和实时监测的项目设计。 项目介绍 串口中断查询&a…

视频监控管理平台EasyCVR结合AI分析技术构建高空抛物智能监控系统,筑牢社区安全防护网

高空抛物严重威胁居民生命安全与公共秩序&#xff0c;传统监管手段存在追责难、威慑弱等问题。本方案基于EasyCVR视频监控与AI视频分析技术&#xff08;智能分析网关&#xff09;&#xff0c;构建高空抛物智能监控系统&#xff0c;实现24小时实时监测、智能识别与精准预警&…

Python----循环神经网络(LSTM:长短期记忆网络)

一、RNN的长期依赖问题 可以看到序列越长累乘项项数越多&#xff0c;项数越多就可能会让累乘结果越小&#xff0c;此时对于W 的更新就取决于第一项或者是前几项&#xff0c;也就是RNN模型会丢失很多较远时刻的信息而 更关注当前较近的几个时刻的信息&#xff0c;即没有很好的长…

【跨端框架检测】使用adb logcat检测Android APP使用的跨端框架方法总结

目录 Weex 跨端框架使用了uni-app的情况区分使用了uni-app还是Weex 判断使用了Xamarin判断使用了KMM框架判断使用了 ​​Ionic 框架判断使用了Cordova框架判断使用了Capacitor 框架使用了React Native框架使用了QT框架使用了Cocos框架使用了Electron 框架使用了flutter 框架使用…

以加减法计算器为例,了解C++命名作用域与函数调用

************* C topic: 命名作用域与函数调用 ************* The concept is fully introducted in the last artical. Please refer to 抽象&#xff1a;C命名作用域与函数调用-CSDN博客 And lets make a calculator to review the basic structure in c. 1、全局函数 A…

AIGC小程序项目

一、文生文功能 &#xff08;1&#xff09;前端部分 使用 Pinia 状态管理库创建的聊天机器人消息存储模块&#xff0c;它实现了文生文&#xff08;文本生成文本&#xff09;的核心逻辑。 1.Pinia状态管理 这个模块管理两个主要状态&#xff1a; messages&#xff1a;存储所…

Axios中POST、PUT、PATCH用法区别

在 Axios 中&#xff0c;POST、PUT 和 PATCH 是用于发送 HTTP 请求的三种不同方法&#xff0c;它们的核心区别源自 HTTP 协议的设计语义。以下是它们的用法和区别&#xff1a; 1. POST 语义&#xff1a;用于创建新资源。 特点&#xff1a; 非幂等&#xff08;多次调用可能产生…

[爬虫知识] Cookie与Session

相关实战案例&#xff1a;[爬虫实战] 爬取小说标题与对应内容 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 一、引入场景 在http协议中&#xff0c;浏览器是无状态&#xff08;即无记忆&#xff09;的&#xff0c;对于请求与响应的产生数据&#…

怎样改变中断优先级?

在STM32中改变中断优先级可以通过STM32CubeMX配置和代码中设置两种方式来实现。以下以STM32F1系列为例进行说明: 使用STM32CubeMX配置 打开工程:在STM32CubeMX中打开你的工程。进入NVIC配置:在Pinout & Configuration选项卡中,点击NVIC进入中断向量控制器配置界面。选…

科学计算中的深度学习模型精解:CNN、U-Net 和 Diffusion Models

关键要点 模型概述:卷积神经网络(CNN)、U-Net 和 Diffusion Models 是深度学习中的核心模型,广泛应用于科学计算任务,如偏微分方程(PDE)求解、图像分割和数据生成。科学计算应用:CNN 可用于高效求解 PDEs,U-Net 擅长医学图像分割和材料分析,Diffusion Models 在生成合…