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

虚函数和纯虚函数是 C++ 中实现多态性的关键概念

虚函数(Virtual Function)

  • 定义:虚函数是在基类中使用 virtual 关键字声明的函数,目的是允许派生类重写该函数。
  • 用途:通过虚函数,基类指针或引用可以调用派生类中重写的函数,从而实现动态多态性。
  • 实现:虚函数可以在基类中提供默认实现,派生类可以选择是否重写。
  • 语法示例
    class Base {
    public:virtual void show() {std::cout << "Base show" << std::endl;}
    };class Derived : public Base {
    public:void show() override { // 重写虚函数std::cout << "Derived show" << std::endl;}
    };
    

纯虚函数(Pure Virtual Function)

  • 定义:纯虚函数是基类中声明为 = 0 的虚函数,表示该函数没有实现,必须由派生类提供实现。
  • 用途:纯虚函数用于定义接口(抽象类),强制派生类实现特定的功能。
  • 实现:不能直接实例化包含纯虚函数的类。
  • 语法示例
    class AbstractBase {
    public:virtual void show() = 0; // 纯虚函数
    };class ConcreteDerived : public AbstractBase {
    public:void show() override { // 必须实现std::cout << "ConcreteDerived show" << std::endl;}
    };
    

总结

  • 虚函数:允许在基类中有实现,派生类可以选择重写。
  • 纯虚函数:没有实现,要求派生类必须重写,形成抽象类,不能被实例化。

这两者共同支持 C++ 的多态性,提供了灵活的对象设计和接口定义。

相关文章:

虚函数和纯虚函数是 C++ 中实现多态性的关键概念

虚函数&#xff08;Virtual Function&#xff09; 定义&#xff1a;虚函数是在基类中使用 virtual 关键字声明的函数&#xff0c;目的是允许派生类重写该函数。用途&#xff1a;通过虚函数&#xff0c;基类指针或引用可以调用派生类中重写的函数&#xff0c;从而实现动态多态性…...

计算机网络IP地址分类,子网掩码,子网划分复习资料

IP 地址的概念 IP 地址是独立于硬件地址的逻辑地址&#xff0c;它是由软件提供的地址。 IP 地址是网络层地址。 IP 编址方案和分类 IP 地址由 32 位二进制数构成&#xff0c;分为前缀(网络地址)和后缀(主机地址) 同一网段中每台计算机的 IP 地址是唯一的网络地址的分配全球…...

LINUX下使用SQLite查看.db数据库文件

目录 1. 安装 SQLite 对于 Debian/Ubuntu 系统&#xff1a; 2.安装完成后操作 打开 SQLite 命令行工具并连接到数据库文件 查看表结构 查询表中的数据 执行其他 SQL 操作 3. 退出 SQLite 命令行工具 4. 使用图形化工具&#xff08;可选&#xff09; 总结 在 Linux 环…...

基于uniapp微信小程序的校园二手书交易系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

性能测试中的操作系统参数优化

目录 以下是一些针对性能测试的操作系统优化建议 关闭不必要的服务和程序&#xff1a; 更新系统和驱动程序&#xff1a; 优化电源管理设置&#xff1a; 调整内存配置&#xff1a; 网络配置优化&#xff1a; 磁盘I/O优化&#xff1a; 内核参数调整&#xff1a; 安全软件…...

rabbitmq高级特性(2)TTL、死信/延迟队列、事务与消息分发

目录 1.TTL 1.1.设置消息过期时间 1.2.设置队列过期时间 2.死信队列 2.1.介绍 2.2.演示 3.延迟队列 3.1.模拟实现延迟队列 3.2.延迟队列插件 4.事务与消息分发 4.1.事务 4.2.消息分发 1.TTL 所谓的ttl&#xff0c;就是过期时间。对于rabbitmq&#xff0c;可以设置…...

了解一下,RN中怎么加载 threejs的

在React Native&#xff08;RN&#xff09;中加载和使用Three.js&#xff0c;一个流行的3D图形库&#xff0c;通常需要一些额外的步骤&#xff0c;因为Three.js主要是为Web浏览器设计的&#xff0c;而React Native则使用原生的渲染引擎。不过&#xff0c;有一些方法可以在React…...

笔记整理—linux驱动开发部分(1)驱动梗概

驱动可以分为广义上的和狭义上的驱动。广义上的驱动是用于操作硬件的代码&#xff0c;而狭义上的驱动为基于内核系统之上让硬件去被操作的逻辑方法。 linux体系架构&#xff1a; 1.分层思想 &#xff1a;在OS中间还会有许多层。 : 2.驱动的上面是系统调用&#xff08;API&…...

金融领域中的敏感性分析和期权价值计算相关的操作

代码主要进行了金融领域中的敏感性分析和期权价值计算相关的操作。首先通过一系列方程求解S3和S2的值,然后基于这些值以及给定的参数计算一些中间变量(a1、a2、a3、b1、b2、b3),最后利用多元正态分布函数(mvncdf)和一元正态分布函数(normcdf)计算期权价值C、净现值(NP…...

GraphQL系列 - 第1讲 GraphQL语法入门

目录 一、介绍GraphQL二、GraphQL基本使用方法三、Schema 定义语言 (SDL)3.1 类型定义1&#xff09;对象类型2&#xff09;标量类型3&#xff09;枚举类型4&#xff09;输入类型5&#xff09;列表类型6&#xff09;非空类型7&#xff09;接口类型8&#xff09;联合类型 3.2 查询…...

015:地理信息系统开发平台ArcGIS Engine10.2与ArcGIS SDK for the Microsoft .NET Framework安装教程

摘要&#xff1a;本文详细介绍地理信息系统开发平台ArcGIS Engine10.2与ArcGIS SDK for the Microsoft .NET Framework的安装流程。 一、软件介绍 ArcGIS Engine 10.2是由Esri公司开发的一款强大的GIS&#xff08;地理信息系统&#xff09;开发平台。该软件基于ArcGIS 10.2 fo…...

Android——显式/隐式Intent

概述 在Android中&#xff0c;Intent是各个组件之间信息通信的桥梁&#xff0c;它用于Android各组件的通信。 Intent 的组成部分 一、显式 Intent 第一种方式 Intent intent new Intent(this, ActFinishActivity.class);startActivity(intent);第二种方式 Intent intent …...

【鸿蒙HarmonyOS实战:通过华为应用市场上架测试版App实现HBuilder X打包的UniApp项目的app转hap教程(邀请码)方式教程详解】

鸿蒙HarmonyOS实战&#xff1a;通过华为应用市场上架测试版App实现HBuilder X打包的UniApp项目的app转hap教程&#xff08;邀请码&#xff09;方式详解 在使用uniapp打包的鸿蒙项目的过程中&#xff0c;由于生成的是app文件&#xff0c;而hdc传给鸿蒙HarmonyOS系统需要的是hap文…...

一篇文章入门傅里叶变换

文章目录 傅里叶变换欧拉公式傅里叶变换绕圈记录法质心记录法傅里叶变换公式第一步&#xff1a;旋转的表示第二步&#xff1a;缠绕的表示第三步&#xff1a;质心的表示最终步&#xff1a;整理积分限和系数 参考文献 傅里叶变换 在学习傅里叶变换之前&#xff0c;我们先来了解一…...

基于python的语音识别与蓝牙通信的温控系统

基于python的语音识别与蓝牙通信的温控系统毕设项目 大家好&#xff0c;我是陈辰学长&#xff0c;一名在 Java 圈辛勤劳作的码农。今日&#xff0c;要和大家分享的是一款基于python的语音识别与蓝牙通信的温控系统毕设项目。项目源码以及部署相关事宜&#xff0c;请联系陈辰学…...

Pandas Series学习

1.Series简介 Pandas Series类似表格的列&#xff08;column&#xff09;&#xff0c;类似于一维数组&#xff0c;可以保存任何数据类型&#xff0c;具有标签&#xff08;索引&#xff09;&#xff0c;使得数据在处理分析时更具灵活性。Series数据结构是非常有用的&#xff0c;…...

为什么要探索太空?这对我们有什么好处?

几个世纪以来&#xff0c;人类一直着迷于宇宙的奥秘&#xff0c;这驱使我们冒险离开地球&#xff0c;去探索太阳系之外的未知环境。在当今世界&#xff0c;我们为什么要进行太空探索之旅这个问题&#xff0c;远不止出于单纯的好奇。 归根结底&#xff0c;太空探索是一种必要之…...

uniapp开发【选择地址-省市区功能】,直接套用即可

一、效果展示 二、代码 <template><view><view class="user_info"><view class="item"...

3个模型的交互式多模型IMM,基于EKF的目标跟踪实例(附MATLAB代码)

文章目录 3个模型的IMM源代码运行结果代码介绍总结 3个模型的IMM 代码实现了基于 I M M IMM IMM&#xff08;Interacting Multiple Model&#xff09;算法的目标跟踪。它使用三种不同的运动模型&#xff08;匀速直线运动、左转弯和右转弯&#xff09;来预测目标的位置&#x…...

利用游戏引擎的优势

大家好&#xff0c;我是小蜗牛。 在当今快速发展的游戏产业中&#xff0c;选择合适的游戏引擎对开发者来说至关重要。Cocos Creator作为一款功能强大且灵活的游戏引擎&#xff0c;为开发者提供了丰富的工具和资源&#xff0c;使他们能够高效地开发出优秀的游戏。本文将探讨如何…...

终极Ghidra安装指南:5分钟在Ubuntu系统快速部署逆向工程神器

终极Ghidra安装指南&#xff1a;5分钟在Ubuntu系统快速部署逆向工程神器 【免费下载链接】ghidra_installer Helper scripts to set up OpenJDK 11 and scale Ghidra for 4K on Ubuntu 18.04 / 18.10 项目地址: https://gitcode.com/gh_mirrors/gh/ghidra_installer 想要…...

避开这5个坑!VS2019+Doxygen注释实战:从代码规范到HTML文档生成

VS2019Doxygen注释实战&#xff1a;5个典型陷阱与高效解决方案 在C项目开发中&#xff0c;良好的代码文档是团队协作的基石。Visual Studio 2019与Doxygen的组合为开发者提供了强大的自动化文档生成能力&#xff0c;但许多团队在实际应用中常陷入一些看似简单却影响深远的陷阱。…...

南开计算机复试面试:一份能让老师眼前一亮的简历和自我介绍该怎么写?(附避坑指南)

南开大学计算机复试&#xff1a;如何打造高通过率的技术简历与自我介绍 站在南开大学计算机楼前&#xff0c;看着玻璃幕墙反射的阳光&#xff0c;我突然想起去年此时自己手忙脚乱准备复试的场景。作为过来人&#xff0c;我深知一份精心设计的简历和流畅自然的自我介绍&#xff…...

类和对象(中)——运算符重载

引入语言在语法上可以直接用指令实现运算符对 内置类型 的操作C中加入了类类型&#xff0c;那如何使用以前的运算符&#xff08;如 - * / 等&#xff09;&#xff0c;对类类型进行操作呢&#xff1f;由此引入运算符重载&#xff1a;C为了增强代码的可读性引入了运算…...

LSTM电池SOC估计最基本方法及全包代码:包含两个数据集、预处理代码、模型代码与估计结果

LSTM做电池SOC估计&#xff0c;最基本的方法&#xff0c;入门必学&#xff0c;包括两个数据集&#xff0c;及其介绍、预处理代码、模型代码、估计结果等&#xff0c;这是我见过最全的一个SOC估计代码包&#xff0c;总共文件大概有70个左右最近在折腾电池SOC估计&#xff0c;发现…...

OpenClaw技能扩展指南:为GLM-4.7-Flash添加自定义功能

OpenClaw技能扩展指南&#xff1a;为GLM-4.7-Flash添加自定义功能 1. 为什么需要自定义技能 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动整理电脑上的照片时&#xff0c;发现现有的技能库无法满足我的特殊需求——按照拍摄地点和人物自动分类。这让我意识到&#xff0…...

别再瞎猜了!YOLOv8 模型缩放(width_multiple)与通道计算(c1,c2)的完整逻辑

YOLOv8模型通道计算与宽度系数的工程化实践指南 在移动端部署YOLOv8模型时&#xff0c;许多工程师会遇到一个典型困境&#xff1a;明明按照官方文档调整了width_multiple参数&#xff0c;却发现模型要么计算量超出预期&#xff0c;要么精度断崖式下跌。这背后其实隐藏着YOLOv8通…...

线程池核心参数与拒绝策略深度解析

前言 线程池是Java并发编程中最常用的工具之一&#xff0c;但很多开发者只停留在“会用”层面。面试中&#xff0c;面试官往往通过线程池考察你对并发编程的理解深度——参数如何设置&#xff1f;为什么这样设置&#xff1f;拒绝策略如何选择&#xff1f; 本文将深入剖析线程池…...

第一批“首席龙虾官”,月薪6万

鱼羊 发自 凹非寺量子位 | 公众号 QbitAI当你以为&#x1f99e;还是大家伙业余养养的新鲜玩具&#xff0c;已经有公司正经在招「龙虾官」了。&#xff08;doge&#xff09;随便打开一个招聘网站一搜&#xff0c;你别说&#xff0c;你还真别说&#xff0c;「OpenClaw」标签下的在…...

OpenClaw备份方案:GLM-4-7-Flash自动加密重要文件并上传网盘

OpenClaw备份方案&#xff1a;GLM-4-7-Flash自动加密重要文件并上传网盘 1. 为什么需要自动化加密备份 去年的一次硬盘故障让我损失了三个月的项目资料&#xff0c;这件事彻底改变了我对数据安全的认知。传统备份方案要么需要手动操作&#xff08;容易遗忘&#xff09;&#…...