纯虚函数和抽象类

news2024/9/29 9:31:48

什么时候使用纯虚函数:

某些类,在现实角度和项目实现角度,都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数,只是为了提供一个形式上的借口,准备让子类来做具体化的实现,此时,这个方法就可以定义为"纯虚函数",包含纯虚函数的类,就称为抽象类.

纯虚函数的使用方法:virtual 返回类型 函数名( ) =0;

#include<iostream>
#include<string>
using namespace std;

class Square {
public:
	Square(const string& color="white") {
		this->color = color;
	}
	//纯虚函数
	virtual double area() = 0;//求面积
private:
	string color;
};

class Circle :public Square {
public:
	Circle(const int radius=0,const string& color="white") :Square(color), r(radius) {};
	//等同于
	/*Circle(const int radius, string& color):Square(color) {
		this->r = radius;
	}*/

private:
	int r;
};

通过此代码可知:virtual double area()=0;为纯虚函数,所以Square类为抽象类.

Circle作为Square的子类,但在Circle类中并没有对其基类的纯虚函数进行实现,所以Circle类依旧为一个抽象类.

众所周知:抽象类不可以创建实例对象

当子类对其基类中的纯虚函数进行实现后,则子类不在是一个抽象类

#include<iostream>
#include<string>
using namespace std;

class Square {
public:
	Square(const string& color="white") {
		this->color = color;
	}
	//纯虚函数
	virtual double area() = 0;//求面积
private:
	string color;
};

class Circle :public Square {
public:
	Circle(const int radius=0,const string& color="white") :Square(color), r(radius) {};
	//等同于
	/*Circle(const int radius, string& color):Square(color) {
		this->r = radius;
	}*/
	double area() {
		return 3.14 * r * r;
	}
private:
	int r;
};

int main(void) {
	//Square s;
	Circle c(10);
	cout << "圆的面积: " << c.area() << endl;
	return 0;
}

 运行结果:

 纯虚函数的注意事项:

父类声明某纯虚函数后,那么他的子类:

(1)要么实现这个纯虚函数(通常)

(2)要么继续把这个纯虚函数声明声明为纯虚函数,这个子类也将成为抽象类

(3)要么对此纯虚函数不做任何处理,等效于(2)的情况(不推荐)

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

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

相关文章

token详解

token详解前言什么是token&#xff1f;为什么要使用token&#xff1f;那么如何使用token呢&#xff1f;使用Token进行身份验证和授权的过程具体步骤项目上如何运用的tokentoken过期了什么办&#xff1f;总结升华前言 本篇博客主要从什么是token&#xff1f;为什么要使用token&…

C++ 图系列之基于有向无环图的拓扑排序算法

1. 前言 有向无环图&#xff0c;字面而言&#xff0c;指图中不存在环(回路)&#xff0c;意味着从任一顶点出发都不可能回到顶点本身。有向无环图也称为 DAG&#xff08;Directed Acycline Graph&#xff09;。 有向无环图可用来描述顶点之间的依赖关系&#xff0c;依赖这个概…

MLX90640 热成像 STM32

点击此处了解详情点击此处了解详情点击此处了解详情点击此处了解详情点击此处了解详情 1、描述 这是一款手持式多功能热像仪&#xff0c;小巧轻便&#xff0c;搭载3.2英寸TFT显示屏、MLX90640热红外探头&#xff0c;锂电池供电&#xff0c;可以在各种场合使用&#xff0c;温度…

( “树” 之 DFS) 572. 另一棵树的子树 ——【Leetcode每日一题】

572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tr…

Densely Connected Convolutional Networks(引言翻译(有选择性))

翻译得有可能会不太专业&#xff0c;望见谅的同时&#xff0c;如果有些地方翻译错了&#xff0c;欢迎批评指正&#xff01; as information about the input or gradient passes through many layers, it can vanish and "wash out" by the time it reaches the end …

淄博烧烤、洛阳汉服......爆火,揭秘实体店客流爆满的秘诀!

淄博烧烤、云南泼水、洛阳穿越...... 沉寂了3年后&#xff0c;线下实体消费终于又开始火热起来&#xff0c;临近五一小长假&#xff0c;国内外旅游订单出现井喷式增长&#xff0c;线下消费持续迎来新一轮的高峰。 而这些热点&#xff0c;也带动了周边很多相关的实体店&#xff…

美团外卖平台的部分外卖 SPU数据实操练习

一、环境要求 Hadoop hive spark hbase开发环境 开启hadoop&#xff1a;start-all.sh开启zookeeper&#xff1a;zkServer.sh start开启hive&#xff1a;nohup hive --service metastore &nohup hive --service hiveserver2 & 打开hive界面&#xff1a;beeline -u j…

Ubuntu16.04安装NCNN和Opencv

一、安装NCNN 官网&#xff1a;NCNN官方文档 On Debian, Ubuntu or Raspberry Pi OS, you can install all required dependencies using: 首先安装NCNN的依赖项&#xff0c;根据官网安装以下依赖项。 sudo apt install build-essential git cmake libprotobuf-dev protobuf-…

dc-4靶机渗透

1.信息搜集&#xff0c;扫描存活主机&#xff0c;扫描端口&#xff0c;服务,发现开放80&#xff0c;22端口&#xff0c;cms没有看到 nmap 192.168.85.0/24 nmap -p1-66535 192.168.85.175 nmap -sv 192.168.85.1752.访问网站&#xff0c;发现登录框&#xff0c;根据提示&#…

360安全卫士 - 设置技巧 / 关闭广告

360安全卫士 - 设置技巧 / 关闭广告前言同步设置基本设置弹窗设置开机小助手安全防护中心漏洞修复木马查杀功能大全管理360文件夹游戏管家健康助手前言 360安全卫士是一款免费的PC安全软件&#xff0c;拥有垃圾清理、病毒查杀、启动项管理等功能。虽然有一些广告&#xff0c;但…

【Python】python技能树之包含元祖的列表升降序

文章目录前言一、实际操作二、使用步骤总结前言 大家都知道&#xff0c;在Python里面可以使用.sort方法或者sorted函数对各种数据进行排序&#xff0c;例如&#xff1a; 一、实际操作 a [2, 3, 1, 9, 3, 7, 4] a.sort() b [2, 3, 1, 9, 3, 7, 4] c sorted(b, reverseTrue…

Linux中的网络

文章目录一 、查看网络配置1.2 route命令—查看路由条目1.3 1.3hostname命令—查看主机名称1.4netstat命令—查看网络连接情况二 、测试网络连接2.1 ping 命令2.2 traceroute命令—跟踪数据包的路由途径2.3 mtr—动态跟踪网络2.4 nslookup命令—测试域名解析三 、使用网络配置命…

迎难而上,阿里高频考点2023Java岗面试突击手册

上周我接到一位粉丝的私信说目前互联网形势实在对他太不友好&#xff0c;感觉自己每个技术栈都会一点&#xff0c;但不是完全精通。基本二面三面的时候就挂了&#xff0c;已经完全不知道该朝哪个方向努力了&#xff0c;希望可以给他一些建议和方法指导。那么&#xff0c;本次就…

[golang gin框架] 20.Gin 商城项目-商品模块功能

一.商品模块数据表ER图关系分析商品模块数据表相关功能关系见:[golang gin框架] 16.Gin 商城项目-商品模块数据表ER图关系分析二.商品相关界面展示商品列表该商品列表有如下功能1.增加商品按钮:跳转到增加商品页面2.搜索功能:输入商品名称,点击搜索3.修改商品字段(上架,精品,新…

软件测试入门第一步:编写测试报告

什么是测试报告&#xff1f; 1、说明&#xff1a;是指把测试的过程和结果写成文档&#xff0c;对发现的问题和缺陷进行分析&#xff0c;为纠正软件的存在的质量问题提供依据&#xff0c;同时为软件验收和交付打下基础。 ps. 【测试过程和测试结果的分析报告&#xff0c;以及上线…

大爽pygame入门教程 第一节 基础知识 练习提示与答案

作者自我介绍&#xff1a;大爽歌, b站小UP主 &#xff0c;编程1对1辅导老师 1 逐行展示 思路提示 点击触发 之前的多行展示&#xff0c;是通过循环实现的。 这一回要点击触发一行的展示&#xff0c;不能直接使用循环了。 这里我们往更深层次去思考一下&#xff1a; 之前循环…

【CSS】margin 外边距负值使用案例 ( 正常外边距 | 使用外边距负值实现边框重叠 | 重叠边框突出显示 )

文章目录一、正常外边距案例二、使用外边距负值实现边框重叠三、重叠边框突出显示案例1、使用相对定位2、使用 z-index 设置定位盒子层级一、正常外边距案例 margine 正常情况下使用 , 设置 float 浮动 , 使得相邻的盒子模型紧贴在一起 ; 如果设置边框 , 则相邻的边框会重叠在…

A Comprehensive Capability Analysis of GPT-3 and GPT-3.5 Series Models论文学习

一、概述 Motivation&#xff1a;GPT系列的模型&#xff0c;像GPT-3&#xff0c;CodeX&#xff0c;InstructGPT&#xff0c;ChatGPT&#xff0c;尽管很多人关注他们能力的不同&#xff0c;但是很少关注GPT系列模型随着时间变化其能力的变化情况。 Methods&#xff1a; 在9个NL…

【LeetCode】轮转数组

&#x1f47b;内容专栏&#xff1a;《LeetCode刷题专栏》 &#x1f428;本文概括&#xff1a;189.轮转数组 &#x1f43c;本文作者&#xff1a;花 碟 &#x1f438;发布时间&#xff1a;2023.4.12 目录 思想1 暴力求解 代码实现&#xff1a; 思想2 三次倒置 代码实现&#…

Linux使用宝塔面板搭建网站,并内网穿透实现公网访问

文章目录前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4.固定http地址5. 配置二级子域名6.创建一个测试页面前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…