当前位置: 首页 > article >正文

多态章-虚函数-重写-协变-override/final-重写覆盖隐藏的对比-纯虚函数与抽象类-多态的底层-虚函数表-动态绑定-静态绑定

使用的父类子类 基于继承下的虚函数 调用 ——代码复用。形成条件1.必须是基类的指针或引用调用虚函数。2.调用子类中拥有父类的虚函数的重写/覆盖。虚函数类成员函数前加以virtual就成为了虚函数 注意非成员函数无法加virtual修饰。class Student :public Person { public: virtual void Buy() { cout Student Buy endl; } };虚函数的重写/覆盖虚函数的重写与覆盖是通过继承下子类内的同返回类型、同名、同参数类型函数的再次实现。注意即使在子类下重写时不加以virtual只要在父类中有加以virtual的就可以形成重写。协变派生类重写虚函数时与基类的虚函数返回值不同。二者相应的返回值都是自身类的指针或者引用。称这种现象为协变。协变意义不大。协变构成重写。class A {}; class B : public A {}; class Person { public: virtual A* BuyTicket() { cout 买票-全价 endl; return nullptr; } }; class Student : public Person { public: virtual B* BuyTicket() { cout 买票-打折 endl; return nullptr; } };析构函数的重写已了解到析构函数在编译时会将函数名替换为destructor。 //为什么暂时不用管在子类的析构函数中无论是否加以virtual都是父类析构函数的重写一般情况下可以不写。特殊情况class A { public: virtual ~A() { cout ~A() endl; } }; class B : public A { public: ~B() { cout ~B()-delete:_p endl; delete _p; } protected: int* _p new int[10]; }; // 只有派⽣类B的析构函数重写了A的析构函数下⾯的delete对象调⽤析构函数才能 构成多态才能保证p1和p2指向的对象正确的调⽤析构函数。 int main() { A* p1 new A; A* p2 new B; delete p1; delete p2; return 0; }虽然是A类型但是指向的是B类的内容调用A的析构函数后不会调用B的析构函数导致B的内存泄漏。override与final关键字override补全编译器无法检测重写是否构成的的编译问题。在子类的目的重写的虚函数名后加override //类似于constfinal限制类无法进行继承。自然也无重写之说。※重载、重写、隐藏/重定义的对比纯虚函数与抽象类纯虚函数在虚函数的后面加以 0 代表此虚函数为纯虚函数(本就虚还加以0更纯正了)。纯虚函数定不定义均不会调用(重写)。包含纯虚函数的类叫做抽象类——抽象类无法实例化出对象。如果派生类继承抽象类后不重写纯虚函数那么派生类也是抽象类这就一定程度上强迫了派生类必须重写因为不重写无法实例化。多态的底层原理下⾯编译为32位程序的运⾏结果是什么 A. 编译报错 B. 运⾏报错 C. 8 D. 12 class Base { public: virtual void Func1() { cout Func1() endl; } protected: int _b 1; char _ch x; }; int main() { Base b; cout sizeof(b) endl; return 0; }答案D、12 //存在函数指针除了_b与_ch成员还有一个__vfptrvirtual function pointer一个含有虚函数的类中至少都有一个虚函数指针 因为虚函数的地址要能够被这个指针维护。对于Person、student、soldier※虚函数表1.基类对象的虚函数表中存放基类所有虚函数的地址。同类型的对象公用一张虚函数表不同类型的对象有各自独立的虚函数表所以基类和派生类有各自的虚表。2.派生类由两部分构成继承下来的基类和自己的成员。一般情况下继承下来的基类中有虚函数表指针自己就不再生成虚函数表指针。但是要注意的是这里继承下来的基类部分虚函数表指针和基类对象的虚函数表指针不是同一个就像修改派生类中的基类成员不会影响独立的基类对象反之亦然。3.派生类中重写的基类的虚函数-派生类的虚函数表中对应的虚函数就会被覆盖成派生类重写的虚函数地址。4.派生类的虚函数表中包含(不是表的类型)(1)基类的虚函数地址 (2) 重写造成覆盖的虚函数地址 (3) 派生类自己的虚函数地址。动态绑定与静态绑定前言静态绑定Static Binding和动态绑定Dynamic Binding是编程中方法或函数调用的两种不同绑定方式。静态绑定在编译时确定而动态绑定在运行时确定。静态绑定在编译时就可以确定编译器根据声明的变量类型来决定调用哪个方法或函数。动态绑定在运行时才可以确定具体的调用方法由对象的实际类型决定而非变量的声明类型。作业静态成员函数与具体对象无关属于整个类核心关键是静态函数无this指针调用时无法不可以通过类名直接调用无this就代表无法实现虚表。编译时多态是早期绑定主要通过重载实现。模板属于编译时多态。重定义指隐藏A* pa (A*)new B; // pa 的静态类型是 A*实际指向 B 对象 。p-调用B的函数.类有几个拥有虚函数的父类就会有几张虚表自身子类不会产生多余的虚表。virtual关键字只在声明时加上在类外实现时不能加。友元函数本身不是类的成员函数但可以访问类的私有和保护成员。

相关文章:

多态章-虚函数-重写-协变-override/final-重写覆盖隐藏的对比-纯虚函数与抽象类-多态的底层-虚函数表-动态绑定-静态绑定

使用的父类子类 基于继承下的虚函数 调用 ——代码复用。形成条件:1.必须是基类的指针或引用调用虚函数。 2.调用子类中拥有父类的虚函数的重写/覆盖。虚函数:类成员函数前加以virtual就成为了虚函数 注意:非成员函数无法加virtual修饰。cl…...

Phi-3-mini-4k-instruct-gguf多场景应用:写邮件/解题/写SQL/生成测试用例实战演示

Phi-3-mini-4k-instruct-gguf多场景应用:写邮件/解题/写SQL/生成测试用例实战演示 1. 模型简介 Phi-3-Mini-4K-Instruct是一个38亿参数的轻量级开源模型,采用GGUF格式提供。这个模型在Phi-3数据集上训练,该数据集包含合成数据和经过筛选的公…...

Java八股文实战:从原理到代码,解析Pixel Couplet Gen的Java客户端设计

Java八股文实战:从原理到代码,解析Pixel Couplet Gen的Java客户端设计 1. 为什么需要关注Java客户端设计 在分布式系统开发中,客户端设计往往是被忽视的一环。很多开发者更关注服务端实现,却忽略了客户端的健壮性和可维护性。但…...

金融评分卡‌是一种将用户信用风险量化为分数的模型工具,广泛应用于贷款审批、额度定价和风险预警等环节,分数越高代表风险越低

‌金融评分卡‌是一种将用户信用风险量化为分数的模型工具,广泛应用于贷款审批、额度定价和风险预警等环节,分数越高代表风险越低。一、评分卡的核心作用金融机构通过评分卡快速判断:是否授信(如信用卡申请)授信额度与…...

0421晨间日记

- 关键词 - 上午- 吃饭- 从五台山到大同 - 下午- 云冈石窟- 石头要好雕刻,就意味着容易损毁- 国家要统治- 人生来就是苦的,让你接受是苦的- 地主因为信佛,得到了好处的,愿意捐钱修建- 大同古城墙- 这个建立起来确实很壮观- 但是高…...

数据预处理和超范围值处理步骤 18

1 .数据预处理实验(1)导入数据操作步骤:① 从“源”面板拖入“Excel”节点。② 双击节点,选择待处理的数据文件。③ 从“输出”面板拖入“表格”节点,连接至“Excel”节点,右键运行,查看原始数据…...

辅助医生能力成长与患者个体化治疗方案生成系统(上)

摘要 本文档详细阐述了一套面向基层医疗机构的辅助医生能力成长与患者个体化治疗方案生成系统的设计与实现。系统以“规则驱动为基、数据驱动为翼”为核心思想,通过症状-疾病映射、指南依据匹配、用药禁忌筛查、个体化调整与风险预警等模块,为临床医生提供实时、可解释的决策…...

【2026最新】JDK 下载安装与环境配置全教程(Windows/Mac/Linux 三平台,零基础友好)

Java 开发的第一步,就是把 JDK 环境搭好。这一步看着简单,但不少新手会在环境变量配置上踩坑——JAVA_HOME 没设对、javac 报“不是内部或外部命令”、改完变量终端里还是不生效……这些坑我都替你踩过一遍了。 这篇文章就用最直白的方式,手…...

在 Word 中,一个公式就能看出你会不会高效排版

在 Word 中,一个公式就能看出你会不会高效排版 很多人写论文、实验报告或者技术文档时,一碰到公式就习惯打开 MathType,点来点去插入分式、求和、下标,操作不算难,但确实有点慢。 其实,对于很多常见公式&am…...

从零开始:Spring Boot + MyBatis 搭建后端接口完整教程

前言:你是否刚接触 Spring Boot,面对一堆配置不知从何下手?是否看了很多教程,却还是搞不清 Controller、Service、Mapper 到底谁先谁后?本文带你从零开始,手把手搭建一个完整的 Spring Boot MyBatis 项目。…...

当智能眼镜遇上了AI——使用灵珠搭建【镜中食谱】智能体

今天带大家沉浸式体验 Rokid 自研的 AI 开发平台——【灵珠平台】! 🌟 零代码、零门槛,手把手教你搭建一个专属的【镜中食谱】智能体,让 Rokid Glasses 解决你的吃饭难题! 本文智能体基于Rokid AI Glasses和灵珠AI平…...

Pi0视觉-语言-动作流模型科研应用:人类意图识别与机器人行为对齐研究

Pi0视觉-语言-动作流模型科研应用:人类意图识别与机器人行为对齐研究 1. 项目概述与科研价值 Pi0是一个突破性的视觉-语言-动作流模型,专门为通用机器人控制而设计。这个模型的核心价值在于它能够将人类的自然语言指令、视觉感知和机器人动作生成无缝连…...

robot_localization实现imu和odom融合

记录使用robot_localization进行融合下载地址:git clone https://gitee.com/bingshuibuliang/robot_localization.git注意:/odometry/filtered是这个节点发送的融合位姿,修改的话需要在ekf_nodelet_template.launch里,在使用robot…...

从扩频时钟到弹性缓存:一张图看懂PCIe是如何‘容忍’时钟偏差,保证数据不丢的

从水流模型到数据同步:图解PCIe时钟偏差补偿机制 想象一下城市供水系统中两个不同步的水泵——一个抽水快,一个抽水慢。如果没有调节装置,要么水管爆裂,要么用户断水。PCIe总线面临的时钟同步挑战与此惊人相似。本文将用生活化的水…...

《Spring Boot 第一个 REST API 教程》

前置知识:Java 基础、Maven 基础 最终效果:启动一个 Spring Boot 应用,通过浏览器访问 http://localhost:8080/hello 得到 {"msg":"Hello World"} 步骤 1:创建项目 推荐使用 Spring Initializr:…...

ROS2笔记2:使用Topic自定义Messages实现nodes之间通讯

1. Package规划 1.1 自定义消息接口my_interface_pkg DirCommandRequest.msg请求Topic消息 由发起node发起的Topic消息builtin_interfaces/Time stamp # 记录时间戳 string directory # 操作的目录 int8 command # 操作指令. 0:list, 1:re…...

如何3分钟解决百度网盘提取码难题:baidupankey完全指南

如何3分钟解决百度网盘提取码难题:baidupankey完全指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾因找不到百度网盘提取码而错过重要资源?当朋友分享学习资料、同事发送工作文件&#xff…...

2026年最新好用的WMS仓库管理系统盘点!10款国内外热门WMS系统推荐

面对仓储管理的挑战,越来越多的企业开始关注WMS系统。但在选型时,很多企业面临同样的困惑:市场上WMS系统那么多,到底哪款适合自己?本文盘点2026年国内外10款热门WMS系统,从功能特点、适用场景、性价比等维度…...

3分钟搞定百度网盘提取码:baidupankey智能工具终极指南

3分钟搞定百度网盘提取码:baidupankey智能工具终极指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经遇到过这样的情况:好不容易找到了需要的资源,却被百度网盘提取码挡在门外&…...

打卡信奥刷题(3138)用C++实现信奥题 P7617 [COCI 2011/2012 #2] KOMPIĆI

P7617 [COCI 2011/2012 #2] KOMPIĆI 题目描述 给定 NNN 个正整数 A1,A2,...,ANA_1,A_2,...,A_NA1​,A2​,...,AN​&#xff0c;求有多少整数对 (i,j)(i,j)(i,j)&#xff0c;满足以下条件&#xff1a; 1≤i<j≤N1 \le i < j \le N1≤i<j≤NAiA_iAi​ 和 AjA_jAj​ 至…...

如何让全面战争MOD开发从繁琐变得优雅:RPFM的现代化解决方案

如何让全面战争MOD开发从繁琐变得优雅&#xff1a;RPFM的现代化解决方案 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt5 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: https…...

我第一次做 OData 后端服务时,真正绊住我的,不是代码,而是 Cloud Foundry 里的这些基础坑

最近我给自己加了一条训练线,除了平时在社区里吸收知识、输出知识,我还逼着自己每周完成一个带明确目标的小任务。第二个任务,我挑了一个很适合拿来练基本功的方向,亲手做一个基于 OData 的后端服务。 原本我以为,真正费劲的部分会落在 OData 协议本身,像 entity、servi…...

CSS如何快速获取网页上的标准色值_借助开发者工具的取色器和色彩格式转换功能

Chrome开发者工具中点击Styles面板颜色旁小色块启用取色器&#xff0c;悬停页面实时显示hex/rgb/hsl值&#xff0c;长按可循环切换格式&#xff1b;rgba透明度和色彩空间差异会导致与设计稿不一致。Chrome开发者工具里怎么直接取网页上某个颜色的十六进制值点开 DevTools&#…...

【Linux】进程(2)状态

目录 一、冯诺依曼 二、操作系统 三、进程状态 &#xff08;1&#xff09;运行状态&#xff1a;进程已获得CPU资源&#xff0c;正在执行指令&#xff0c;是进程生命周期中唯一能直接操作硬件、推进任务的阶段。 &#xff08;2&#xff09;阻塞状态&#xff1a;进程因等待特…...

Canny边缘检测的精度天花板在哪里?深入剖析Devernay亚像素校正的误差与优化

Canny边缘检测的精度天花板在哪里&#xff1f;深入剖析Devernay亚像素校正的误差与优化 在工业检测、遥感成像等对精度要求严苛的领域&#xff0c;传统Canny算法提供的像素级边缘定位往往难以满足需求。当测量芯片电路线宽或分析卫星图像中的道路边界时&#xff0c;即使单个像素…...

2026 最新 Gemini 国内能用吗?无需特殊配置直连教程

在2026年的今天&#xff0c;AI工具已经成为我们日常生活和工作的重要助手。很多用户关心&#xff1a;Gemini这款由Google推出的强大AI模型&#xff0c;在国内能否顺畅使用&#xff1f;答案是肯定的。目前最推荐的访问方式是通过OneAiPlus(u.oneaiplus.cn)平台&#xff0c;它聚合…...

JDK安装与忍者像素绘卷:天界画坊Java SDK开发实战

JDK安装与忍者像素绘卷&#xff1a;天界画坊Java SDK开发实战 1. 前言&#xff1a;为什么需要这个SDK 如果你正在开发一个需要调用AI绘画服务的Java应用&#xff0c;直接处理HTTP请求、参数序列化和结果解析可能会很麻烦。本文将带你从JDK安装开始&#xff0c;一步步构建一个…...

BGE Reranker-v2-m3效果实测:在低资源方言查询(如粤语书面语)中保持83%+匹配准确率

BGE Reranker-v2-m3效果实测&#xff1a;在低资源方言查询&#xff08;如粤语书面语&#xff09;中保持83%匹配准确率 1. 引言&#xff1a;方言查询的匹配挑战 在日常信息检索中&#xff0c;我们经常遇到一个棘手问题&#xff1a;当用户使用方言或地区性语言进行查询时&#…...

2026年,高精度食品卫生级超声波液位计批发,究竟有何独特之处?

在食品行业的生产过程中&#xff0c;液位的精确测量至关重要&#xff0c;它关乎着产品的质量、生产的效率以及成本的控制。高精度食品卫生级超声波液位计作为一种关键的测量工具&#xff0c;在2026年的市场上正发挥着越来越重要的作用。下面我们就来详细探讨一下它的独特之处。…...

yolov8模型训练MOT20数据集 行人多目标跟踪计数数据集的训练及应用 如何根据mot20数据集 来实现行人目标识别,行人追踪,行人的计数

yolov8模型训练MOT20数据集 行人多目标跟踪计数数据集的训练及应用 如何根据mot20数据集 来实现行人目标识别&#xff0c;行人追踪&#xff0c;行人的计数 文章目录1. 数据准备与预处理2. 创建 data.yaml 文件3. 环境搭建4. 模型训练5. 推理与部署6. 性能评估7. 模型导出行人追…...