【C++】多态 ⑪ ( 纯虚函数和抽象类 | 纯虚函数语法 | 抽象类和实现 | 代码示例 )
文章目录
- 一、纯虚函数和抽象类
- 1、纯虚函数
- 2、纯虚函数语法
- 3、抽象类和实现
- 二、完整代码示例
一、纯虚函数和抽象类
1、纯虚函数
纯虚函数 : 在 C++ 语言中 , " 纯虚函数 " 是 特殊类型的 虚函数 , " 纯虚函数 " 在 父类 中 声明 , 但是没有实现 ;
抽象类 : " 纯虚函数 " 的 作用 是将 父类 变为 " 抽象类 " , 该类不能被实例化 , 不能创建类的实例对象 ;
继承抽象类必须实现纯虚函数 : 任何从 " 抽象类 " 派生出来的 子类 都必须提供 " 纯虚函数 " 的实现 ;
父类 中的 " 纯虚函数 " 为 其若干子类 提供了一个 公共界面 , 用于 接口的 封装 / 设计 , 软件的 模块划分 ;
2、纯虚函数语法
纯虚函数语法 :
- 函数前 使用 virtual 关键字修饰 ;
- 函数声明后在 括号后面为函数 赋值 0 ;
// 纯虚函数定义
virtual 返回值类型 函数名(参数列表) = 0;
纯虚函数 定义 代码示例如下 :
// 纯虚函数 virtual void pureVirtualFunction() = 0;
3、抽象类和实现
" 抽象类 " 就是在类中定义了一个 " 纯虚函数 " ,
" 抽象类 " 至少包含一个纯虚函数 , 抽象类 不能 创建 实例对象 , 只能作为其它类的 父类 ;
" 纯虚函数 " 是一种在 父类 中 声明但没有实现 的虚函数 , 其目的是使 父类 成为抽象类 ;
任何从抽象类派生出来的子类都必须提供 纯虚函数 的实现 ;
" 抽象类 " 代码示例 :
// 定义了纯虚函数的类就是抽象类
class AbstractClass {
public: // 纯虚函数 virtual void pureVirtualFunction() = 0;
};
上述 AbstractClass 类是抽象类 , 该类不能创建实例对象 ;
- 否则会报错 error C2259: “AbstractClass”: 无法实例化抽象类 ;
子类 继承 AbstractClass 类 , 必须 实现 virtual void pureVirtualFunction() 函数 ;
下面代码中 , DerivedClass 派生类 , 继承 AbstractClass 抽象类 , 实现了 纯虚函数 pureVirtualFunction 函数 ;
实现的 纯虚函数 可以不使用 virtual 修饰 , 在 函数声明 最后添加 override 关键字 ;
// 派生类继承抽象类
class DerivedClass : public AbstractClass {
public: // 实现纯虚函数void pureVirtualFunction() override { // 函数体 }
};
二、完整代码示例
抽象类 的 核心作用 就是 使用 抽象类类型指针 指向 子类对象 ,
使用 抽象类 指针 调用 纯虚函数 , 由于 父类 的 纯虚函数没有实现 , 实际调用的 是 子类对象的 函数 ,
该调用 发生了 多态 ;
代码示例 :
#include "iostream"
using namespace std;// 定义了纯虚函数的类就是抽象类
class AbstractClass {
public:// 纯虚函数 virtual void pureVirtualFunction() = 0;
};// 派生类继承抽象类
class DerivedClass : public AbstractClass {
public:// 实现纯虚函数void pureVirtualFunction() override {// 函数体 cout << "调用 DerivedClass 的 pureVirtualFunction 函数" << endl;}
};int main() {// 抽象类不能实例化// error C2259: “AbstractClass”: 无法实例化抽象类//AbstractClass a;// 使用抽象类指针 指向 子类对象AbstractClass* p = new DerivedClass();// 使用抽象类指针 调用 子类对象 实现的 纯虚函数// 运用了 多态 原理p->pureVirtualFunction();// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}
执行结果 :
调用 DerivedClass 的 pureVirtualFunction 函数
Press any key to continue . . .
相关文章:

【C++】多态 ⑪ ( 纯虚函数和抽象类 | 纯虚函数语法 | 抽象类和实现 | 代码示例 )
文章目录 一、纯虚函数和抽象类1、纯虚函数2、纯虚函数语法3、抽象类和实现 二、完整代码示例 一、纯虚函数和抽象类 1、纯虚函数 纯虚函数 : 在 C 语言中 , " 纯虚函数 " 是 特殊类型的 虚函数 , " 纯虚函数 " 在 父类 中 声明 , 但是没有实现 ; 抽象类 …...
node 第十四天 基于express的第三方中间件multer node后端处理用户上传文件
Multer 是一个 node.js 中间件,用于处理multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上的所以非常高效。前面我们已经知道了怎样利用express提供的静态资源处理中间件express.static()处理用户请求静态资源文件(图片, js…...

KnowledgeGPT:利用检索和存储访问知识库上增强大型语言模型10.30
利用检索和存储访问知识库上增强大型语言模型 摘要引言2 相关研究3方法3.1 任务定义3.2 知识检索3.2.1 代码实现3.2.2 实体链接3.2.3 获取实体信息3.2.4 查找实体或值3.2.5 查找关系 3.3 知识存储 4 实验4.1 实验设置4.2 流行知识库上的查询4.3 基于知识的问题回答 摘要 大型语…...
Angular material Chips Autocomplete
Chips Autocomplete 官网的例子我没法正常使用,无法实现搜索 我的select是个通用组件,现在贴代码: component.ts import {Component,ElementRef,forwardRef,Input,OnChanges,OnDestroy,OnInit,SimpleChanges,ViewChild, } from angular/co…...

『亚马逊云科技产品测评』活动征文|搭建基础运维环境
授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 目录 1、什么是容器化部署 2、连接到控制台 3、安装docker 3.1 更新…...
双指针扫描
import os import sys# 请在此输入您的代码 sinput() Alist(s) nlen(A) t1 for i in range(n//2):if A[i]!A[n-1-i]:t0break if t1:print(Y) else:print(N)n,smap(int,input().split()) alist(map(int,input().split())) #尺取法,变O(n*n)为O(n) #维护一个最短的区间…...

uniapp小程序九宫格抽奖
定义好奖品下标,计时器开始抽奖,请求接口,出现中奖奖品之后,获取中奖商品对应的奖品下标,再次计时器判断当前移动的小标是否为中奖商品的下标,并且是否转到3圈(防止转1圈就停止)&…...
mysql树状结构查询及注意事项
一、说明 由于Mysql不像oracle一样支持树状查询,需要用户自行处理,本文记录了一种常见的通过自定义函数的方式进行mysql树状查询的方法,以及使用的注意事项。 二、函数 CREATE DEFINERrootlocalhost FUNCTION get_child_menus(in_pid varc…...

TimeGPT-1——第一个时间序列数据领域的大模型他来了
一直有一个问题:时间序列的基础模型能像自然语言处理那样存在吗?一个预先训练了大量时间序列数据的大型模型,是否有可能在未见过的数据上产生准确的预测?最近刚刚发表的一篇论文,Azul Garza和Max Mergenthaler-Canseco提出的TimeGPT-1,将ll…...

通过Google搜索广告传送的携带木马的PyCharm软件版本
导语 最近,一起新的恶意广告活动被发现,利用被入侵的网站通过Google搜索结果推广虚假版本的PyCharm软件。这个活动利用了动态搜索广告,将广告链接指向被黑客篡改的网页,用户点击链接后下载的并不是PyCharm软件,而是多种…...

网站文章收录因素,别人复制文章排名比你原创的好?
我经常看到有站长抱怨“网站不收录”,“排名不好”,“复制的文章为什么秒收”之类的问题。对于SEO从业者来说,这确实是一个打击,认为搜索引擎不公平。凭什么自己原创不收录,别人复制去了,秒收他的ÿ…...

C#开源的一个能利用Windows通知栏背单词的软件 - ToastFish
前言 今天给大家推荐一个C#开源且免费的能利用Windows通知栏背单词的软件,可以让你在上班、上课等恶劣环境下安全隐蔽地背单词(利用摸鱼时间背单词的软件):ToastFish。 操作系统要求 目前该软件只支持Windows10及以上系统&…...

速拿offer,超全自动化测试面试题+答案汇总,背完还怕拿不到offer?
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、你会封装自动化…...
LeetCode----1415. 长度为 n 的开心字符串中字典序第 k 小的字符串
题目 一个 「开心字符串」定义为: 仅包含小写字母 [‘a’, ‘b’, ‘c’].对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。比方说,字符串 “abc”,“ac”,“b” 和 “abcbabcbcb” 都是开心字符串,但是 “aa”,“baa” 和 “a…...
2310C++协程超传服务器
原文 告别异步回调模型,写代码更简单.同样也是跨平台,仅头文件的,包含头文件即可用,来看看它的用法. 基本用法 提供getpost服务 coro_http_server server(1, 9001);server.set_http_handler<GET, POST>("/", [](coro_http_request &req, coro_http_respo…...

【排序算法】 计数排序(非比较排序)详解!了解哈希思想!
🎥 屿小夏 : 个人主页 🔥个人专栏 : 算法—排序篇 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言🌤️计数排序的概念☁️什么是计数排序?☁️计数排序思想⭐绝对…...

20231103配置cv180zb的编译环境【填坑篇】
20231103配置cv180zb的编译环境【填坑篇】 2023/11/3 11:36 感谢您选择了晶视科技的cv180zb,让我们一起来填坑。 在你根据文档找不到答案的时候,是不是想把他们家那个写文档的家伙打一顿,我顶你。 当你在在网上找一圈,BAIDU/BING/…...

足底筋膜炎如何治疗
足底筋膜炎主要表现为下床站立后或休息后再次走路时,出现足跟部的疼痛与不适症状,活动后可自行缓解,但走路时间长或较剧烈活动后,疼痛会再次加重,甚至有针扎样疼痛感向脚前部发散,影响患者的日常生活。 足…...
rabbitMq路由键介绍
rabbitTemplate.convertAndSend() 是 Spring AMQP 中用于发送消息到 RabbitMQ 的方法。下面是对您提供的代码示例的解释: rabbitTemplate.convertAndSend("ums-platform.ex", "ums.report.routing", param);这行代码主要完成以下几个操作&…...

【python基础】python切片—如何理解[-1:],[:-1],[::-1]的用法
文章目录 前言一、基本语法二、切片1.a[i:j]2.a[i:j:k] 总结:[-1] [:-1] [::-1] [n::-1] 前言 在python中,序列是python最基本的数据结构,包括有string,list,tuple等数据类型,切片对序列型对象的一种索引方…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...