c++ 纯虚函数与抽象类的理解

1.纯虚函数的概念

只有声明,没有函数体的虚函数。纯虚函数在父类中声明,需要在子类中中去具体实现。

语法为virtual void PureVirtualFunc() = 0;

=0为纯虚函数的格式,类似于这是一个空的函数指针;

2.抽象类

拥有一个及以上纯虚函数后的类就成为了抽象类;

抽象类不能用于实例化对象,因为类里边有函数没有实现,是不完整的类,所以不能用于定义对象;

抽象类可以用来定义指针;因为抽象类毕竟是个类型,当然可以用来定义指针,

然而抽象类定义的指针并没有当前类类型的对象被该指针所指向,因为抽象类不能定义对象,所以抽象类只能用来对派生类服务;

// 只要子类中有一个纯虚函数没有实现,那么这个子类就无法实例化对象

// 不管这个纯虚函数是在自己类中声明的还是继承过来的

// 纯虚函数与抽象类
#include <iostream>
#include <string>// 拥有一个及以上纯虚函数后的类就成为了抽象类
class Father
{
public:Father() {}~Father() {}// 如果所有的函数都为纯虚函数可以将这个类理解为纯虚类// 但是一般没有虚类和纯虚类概念,因为纯虚类也就是抽象类virtual void PureVirtualFunc() = 0;
};class Son : public Father
{
public:Son() {}~Son() {}// 如果子类没有将父类中的纯虚函数全部实现,则这个子类也是抽象类,也无法定义对象// 就是说只要类里边有纯虚函数就不能实例化对象,不管这个纯虚函数是自己声明的还是继承来的 void PureVirtualFunc() {}
};class Son1 : public Father
{
public:Son1() {}~Son1() {}// 如果子类没有将父类中的纯虚函数全部实现,则这个子类也是抽象类,也无法定义对象void PureVirtualFunc();
};int main()
{// 抽象类不能用于定义对象// Father obj_father;// 抽象类可以用啦定义指针Father *p_father;Son obj_son;// Son1无法实例化对象// 如果子类没有将父类中的纯虚函数全部实现,则这个子类也是抽象类,也无法定义对象// 就是说只要类里边有纯虚函数就不能实例化对象,不管这个纯虚函数是自己声明的还是继承来的// Son1 obj_son1;return 0;
}
// 纯虚函数与抽象类
#include <iostream>
#include <string>
using namespace std;
// 拥有一个及以上纯虚函数后的类就成为了抽象类
class Father
{
public:Father() {cout << "Father::Father()" << endl;}~Father() {cout << "Father::~Father()" << endl;}// 如果所有的函数都为纯虚函数可以将这个类理解为纯虚类// 但是一般没有虚类和纯虚类概念,因为纯虚类也就是抽象类virtual void PureVirtualFunc() = 0;
};// 继承父类
class Son : public Father
{
public:Son() {cout << "Son::Son()" << endl;}~Son() {cout << "Son::~Son()" << endl;}void PureVirtualFunc() {cout << "Son::PureVirtualFunc()" << endl;}
};// 继承子类
class GSon : public Son
{
public:GSon() {cout << "GSon::GSon()" << endl;}~GSon() {cout << "GSon::~GSon()" << endl;}void PureVirtualFunc() {cout << "GSon::PureVirtualFunc()" << endl;}
};int main()
{Father *p_father;Son obj_son;cout << "子类类型直接调用自己定义的纯虚函数:" << endl;obj_son.PureVirtualFunc();// 父类指针调用子类定义的纯虚函数cout << "父类类型指针指向子类:" << endl;p_father = &obj_son;p_father->PureVirtualFunc();Son *p_son;GSon obj_gson;p_son = &obj_gson;// 输出结果:GSon::PureVirtualFunc()// 说明指针调用的虚函数定义是在指针指向对象的类型中定义的// 也就是说Father中声明的纯虚函数经过Son继承后,还可以继续被Gson继承p_son->PureVirtualFunc();return 0;
}
// 纯虚函数与抽象类
// 只要子类中有一个纯虚函数没有实现,那么这个子类就无法实例化对象
// 不管这个纯虚函数是在自己类中声明的还是继承过来的
#include <iostream>
#include <string>
using namespace std;
// 拥有一个及以上纯虚函数后的类就成为了抽象类
class Father
{
public:Father() {cout << "Father::Father()" << endl;}~Father() {cout << "Father::~Father()" << endl;}// 如果所有的函数都为纯虚函数可以将这个类理解为纯虚类// 但是一般没有虚类和纯虚类概念,因为纯虚类也就是抽象类virtual void PureVirtualFunc() = 0;// 只要子类中有一个纯虚函数没有实现,那么这个子类就无法实例化对象virtual void PureVirtualFunc1() = 0;
};// 继承父类
class Son : public Father
{
public:Son() {cout << "Son::Son()" << endl;}~Son() {cout << "Son::~Son()" << endl;}void PureVirtualFunc() {cout << "Son::PureVirtualFunc()" << endl;}
};int main()
{Father *p_father;// 只要子类中有一个纯虚函数没有实现,那么这个子类就无法实例化对象// 不管这个纯虚函数是在自己类中声明的还是继承过来的// Son obj_son;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

金蝶AAS-V9.0前后端部署

前言 包含金蝶AAS9.0部署&#xff0c;前端部署&#xff0c;后端部署。 金蝶AAS9.0部署 1. 下载金蝶AAS9.0安装包上传至服务器&#xff1b; 2. 解压安装包&#xff1b; unzip -d /opt/AAS-V9.0 AAS-V9.0.zip3. 配置JAVA路径&#xff1b; echo $JAVA_HOME vim /opt/AAS-9.0…

06_机器学习算法_朴素贝叶斯

1. 朴素贝叶斯的介绍与应用 1.1 朴素贝叶斯的介绍 朴素贝叶斯算法(Naive Bayes, NB)是应用最为广泛的分类算法之一。它是基于贝叶斯定义和特征条件独立假设的分类方法。由于朴素贝叶斯法基于贝叶斯公式计算得到,有着坚实的数学基础,以及稳定的分类效率。NB模型所需估计的…

Mac SourceTree配置ssh git仓库

一、准备条件 1、Mac系统电脑 2、安装好SourceTree 3、获取ssh git仓库地址 二、配置步骤 1、打开终端命令行 ssh -t rsa -C "xxx""xxx"代表注册git仓库时&#xff0c;使用的用户名&#xff0c;可以是字符串也可以是邮箱地址。 如果遇到输入密码&#xf…

2024MySQL8安装与绿色版Navicat连接【提供安装包】数据库

视频教程面向人群和使用方法&#xff1a; 1&#xff1a;大学生【解决老师作业或自己兴趣学习需要】; 2&#xff1a;第一次需要安装MySQL的开发者【需要简单使用&#xff0c;因为项目会用到】 3&#xff1a;老手二倍速&#xff0c;新手老老实实按照教程一倍速模仿视频操作&am…

照明灯具十大排名哪个品牌好?照明灯具前十名排行榜大公开!

照明灯具十大排名哪个品牌好&#xff1f;护眼台灯作为照明灯具的重要组成部分&#xff0c;其品质与品牌选择显得尤为关键&#xff0c;市面上品质比较好的护眼台灯品牌有书客、明基、松下等品牌。本文旨在为大家揭晓照明灯具十大排名中的佼佼者&#xff0c;揭示照明灯具前十名的…

思科期末大作业

计算机网络&#xff0c;可代写网络作业&#xff0c; 思科cisco模拟器&#xff0c;eve&#xff0c;制作校园局域网、企业局域网&#xff0c;实现路由交换、单臂路由、冗余、ACL、Nat、PAT、DHCP,RIP,OSPF,pppoe等技术&#xff0c;价格合理&#xff0c;详细私聊

原创|手把手教你构建评分卡模型

作者&#xff1a;胡赟豪‍‍‍‍ 本文约2800字&#xff0c;建议阅读5分钟 本文介绍了构建评分卡模型。‍‍‍ 一、背景 在各种机器学习、深度学习模型快速发展的当下&#xff0c;评分卡模型作为一种可解释机器学习模型&#xff0c;仍然在金融、营销等领域被广泛使用。这一模型通…

vue嵌套路由

一、嵌套 children配置 1.父类路由 mymusic 2.子类路由 musicson 1.创建MusicSon组件 <template><div><p>从前和后来</p><p>唯一</p><p>运气来的似有若无</p></div> </template><script>export defaul…

案例 | 澳鹏自动驾驶标注方案入选虎嗅智库行业报告

随着自动驾驶技术发展及方案演进&#xff0c;市场对于数据标注的数量和质量的需求都呈现指数级增长。传统的手工标注已不能满足标注需求&#xff0c;自动标注伴随大模型的发展应运而生。 在这一背景下&#xff0c;虎嗅智库发布《自动驾驶数据标注技术落地洞察》&#xff0c;并…

PCB供电夹子DIY

在刷小红书的时候&#xff0c;看到了清华卓晴教授【https://zhuoqing.blog.csdn.net/】DIY的供电夹子&#xff0c;感觉对于自己DIY PCB的时候供电会比较方便&#xff0c;物料也比较简单&#xff0c;打算复刻一下。 使用物料 1、小夹子&#xff0c;文具店都有卖&#xff0c;选…

专业做护眼灯的有哪些品牌,强烈分享几款专业护眼灯的牌子

随着学生们重返校园&#xff0c;家长和孩子们忙于新学期的准备工作&#xff0c;眼睛健康的考量自然也在其中。这也是为何近年来护眼台灯越来越受到欢迎的原因之一。在受欢迎的过程中也会有不少人萌生出“专业做护眼灯的有哪些品牌”这一问题&#xff0c;作为一个长期近视并且日…

SpringBoot+MybatisPlus实现读写分离,自动切换数据源,主从同步

读写分离有必要吗&#xff1f; 实现读写分离势必要与你所做的项目相关&#xff0c;如果项目读多写少&#xff0c;那就可以设置读写分离&#xff0c;让“读”可以更快&#xff0c;因为你可以把你的“读”数据库的innodb设置为MyISAM引擎&#xff0c;让MySQL处理速度更快。 实现…

【无标题】海图微电子产品

一、HT2300 1、产品介绍 HT2300在全分辨率 (1920 H 1080 V) 下&#xff0c;它们的帧率可达2500fps。加上全局快门像素和低噪声等特性&#xff0c;可满足对高分辨率&#xff0c;高速CMOS图像传感器的需求&#xff0c;适用于科学研究&#xff0c;工业检测和数字影视中高速视频捕捉…

汇凯金业:贵金属投资如何操作

投资贵金属虽然可能看起来令人生畏&#xff0c;但只要你知道如何操作&#xff0c;就可能会变得实际可行。以下是操作贵金属投资的基本步骤&#xff1a; 1. 了解市场 第一步是学习贵金属投资的基础知识&#xff0c;了解市场的运作方式&#xff0c;类型的区别(如黄金、白银、铂…

JETBRAINS IDES 分享一个2099通用试用码,支持一键升级!DataGrip 2024 版

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

【手势识别-UILongPressGestureRecognizer长按 Objective-C语言】

一、我们来说这个长按啊, 1.长按这个手势,也是,步骤都是一样的,首先,也是这三大步啊, 1)创建手势对象 2)对某一个view添加手势 3)实现手势的方法 首先,也是三大步, 1)创建手势对象:首先,你要告诉我,你要使用哪一个手势,我要使用一个叫做UILongPressGesture…

【吊打面试官系列】Java高并发篇 - 创建线程的有哪些方式?

大家好&#xff0c;我是锋哥。今天分享关于 【创建线程的有哪些方式&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 创建线程的有哪些方式&#xff1f; 1、继承 Thread 类创建线程类 2、通过 Runnable 接口创建线程类 3、通过 Callable 和 Future 创建线程 …

【Maven】Nexus私服简介_下载安装_登录

1、简介 1.1介绍 Nexus私服&#xff0c;也被称为Maven仓库管理器&#xff0c;是许多公司在自己的局域网内搭建的远程仓库服务器。提供了强大的仓库管理功能和构件搜索功能&#xff0c;使得开发人员能够更方便地管理和使用Maven项目中的依赖库。 1.2作用 内网访问&#xff1…

JAVA面试库

1、基础 1.1、面向对象编程有哪些特性 1、抽象 抽象就是对同一个目标的共有的属性、特征、方法、功能、行为等进行抽取并归纳总结&#xff0c;它是一种将复杂现实简单化为模型的过程&#xff0c;它关注的是对象行为&#xff0c;而不用关注具体的实现细节。 在面向对象编程中…

CPT7数据保存详细步骤

一、连接设备、打开NovAtelConnect 软件 (1)点击1,并在2中输入如下命令: LOG RANGEB ONTIME 1 // 输出原始数据记录在板卡LOG RAWEPHEMB ONTIME 1 // 输出 GPS 原始星历记录在板卡LOG bdsephemerisb ONTIME 1 // 输出