C++基础知识 - 纯虚函数与抽象类

2023-11-08

什么时候使用纯虚函数

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

纯虚函数的使用方法
用法:纯虚函数,使用virtual和 =0
virtual float getArea() = 0;

#include <iostream>
#include <Windows.h>
using namespace std;

class Shape {
public:
	Shape(string color = "红色") { this->color = color; }
	string getColor() { return color; }

	//把getArea函数设置为纯虚函数
	//设置了纯虚函数后,Shape类就成为抽象类
	//该类就无法创建对象
	virtual float getArea() = 0;
private:
	string color;	//颜色
};


// Circle 类继承自抽象类 Shape 
class Circle : public Shape {
public:
	Circle(float radius = 0, string color = "红色")
		: Shape(color), r(radius) {};

	// 如果在子类中没有重写父类的纯虚函数方法,
	// 那么子类也是抽象类, 子类无法创建对象
	float getArea() { return 3.14 * r * r; }
private:
	float r;//半径
};

int main(void) {
	//不能使用抽象类创建对象
	//Shape s;
	
	Circle c(10, "红色");
	cout << c.getArea() << endl;

	system("pause");
	return 0;
}

纯虚函数的注意事项:

父类声明某纯虚函数后,
那么它的子类,
1)要么实现这个纯虚函数 (最常见)
2)要么继续把这个纯虚函数声明为纯虚函数,这个子类也成为抽象类
3)要么不对这个纯虚函数做任何处理,等效于上一种情况(该方式不推荐)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++基础知识 - 纯虚函数与抽象类 的相关文章

随机推荐

  • USB Composite 组合设备之麦克风与扬声器

    USB Composite 组合设备之麦克风与扬声器 效果展示 修改 修改配置 修改设备描述符 修改配置及接口 端点描述符 修改初始化函数接口 数据处理接口 参考 效果展示 修改 USB Audio拓扑 输入端点地址 0x81 Microp
  • ipa在线安装搭建_iOS 可以永久安装IPA软件了,前提是……

    戳上面的蓝字关注我们哦 公众号内所提供的所有资源均为免费分享 其中大部分内容是来源于网络 版权归原作者本人所有 仅供学习和交流 禁止商用或其它牟利行为 有下载的文件资源在24小时内必须删除 所有的文件版权归原版权方 如果您喜欢本软件并准备长
  • vue日期组件el-date-picker中更改默认日期格式并且实时显示的方法

    在项目中有一个需求是这样的 要求实时显示他的当前默认时间 并且不能修改 使用了默认 default value currentTime 属性之后 新增的时候会报错 前端与后端传递的数据不匹配 因为默认时间被new date 解析之后返回的数
  • VS2013多线程程序卡住以及各种异常的调试

    多线程程序 使用了锁 当卡住时 可以如下调试 点击 调试 全部中断 然后在 线程 窗口会显示当前运行的各个线程 以及他们的堆栈信息 这样就可以查看各个线程卡在哪里了 其它异常 VS蹦出一个异常窗口 类似如下 点击 重试 然后弹出如下窗口 点
  • 避坑10_VScode每次输入右上角都会有数字x累加

    一 问题 不知道什么原因 输入字符甚至ctrl s 右上角都会跳出一个数字x 一直累加 刚开始以为是git的修改提醒 但找来找去也没有发现在哪儿控制开关 十分烦躁 二 原因 插件Power Mode惹的祸 之前并未出现这种情况 但今天突然跳
  • CodeMirror用户手册

    用户手册和参考指南版本5 46 1 CodeMirror是一个代码编辑器组件 可以嵌入到Web页面中 核心库仅提供编辑器组件 不提供伴随按钮 自动完成或其他IDE功能 它确实提供了丰富的API 在此基础上可以直接实现这些功能 有关额外功能的
  • ipad鼠标怎么把圆圈换成箭头_高度融合,让iPad更像笔记本的金属键盘

    一直以来 都想给我的iPad配上一个键盘 这样在出行的时候 就不用带着厚重的笔记本电脑了 或者有些事情 可以直接用iPad解决 就不用再打开电脑 可能有人会说 为什么不直接用iPad上的虚拟键盘 用过的应该知道 iPad上的虚拟键盘 单手够
  • 12种排序算法详解

    作者 寒小阳 时间 2013年9月 出处 http blog csdn net han xiaoyang article details 12163251 声明 版权所有 转载请注明出处 谢谢 0 前言 从这一部分开始直接切入我们计算机互联
  • JavaScript -- 隐式类型转换

    文章目录 隐式类型转换 字符串拼接 使用 运算 if语句 总结 隐式类型转换 在JavaScript运算中 当运算符两边数据类型不一致时 编译器会自动将运算符两边的数据进行类型转换 转成一样的数据类型再进行计算 像这种由编译器自动完成数据类
  • .NET正则匹配模式

    1 概述 匹配模式指的是一些可以改变正则表达式匹配行为的选项或修饰符 不同的语言支持的匹配模式不同 使用的方式也不同 一般可分为全局和内联两种 下面主要介绍 NET中的匹配模式 其它语言的匹配模式 后续视情况补充 2 匹配模式 2 1 全局
  • 用 Python 分析《红楼梦》(2)

    6 词频统计 完成分词以后 词频统计就非常简单了 我们只需要根据分词结果把片段切分开 去掉长度为一的片段 也就是单字 然后数一下每一种片段的个数就可以了 这是出现次数排名前 20 的单词 括号内为频数 可以跟之前只统计出现次数 不考虑切分问
  • Linux上如何编译android apk——jdk、gradle、android sdk的安装与使用

    背景 Jenkins上目前需要增加对安卓流水线的支持 研究了下 发现核心流程就是通过gradle命令 来调用android sdk生成apk包 再把apk作为制品放到Jenkins上即可 环境准备 主要就三个 jdk gradle和andr
  • (二):C++求解文法的First集和Follow集

    功能及代码结构 为实现编译器前端 需要对文法进行分析 该部分实现从文件中读入文法 方便修改 用合适的数据结构表示并求解各个非终结符号的First集和Follow集 仓库 https github com xs1317 Complier 文件
  • java每日一题

    写两个函数 分别求两个整数的最大公约数和最小公倍数 用主函数调用这两个函数 并输出结果两个整数由键盘输入 输入格式 两个数 输出格式 最大公约数 最小公倍数 样例输入 6 15 样例输出 3 30 import java util Scan
  • Vue3.x中的Provider Inject

    我们可以使用 provide 和 inject 对父组件可以作为其所有子组件的依赖项提供程序 而不管组件层次结构有多深 这个特性有两个部分 父组件有一个 provide 选项来提供数据 子组件有一个 inject 选项来开始使用这个数据 s
  • 字符串的长度

    下面字符串的长度为 考点 转义字符 转义字符的意义 我们使用的字符串都是用 双引号框起来的 电脑只识别双引号内框起来的内容 printf 但是如果想表达的字符是 abc 即如下 printf abc 运行结果 报错 电脑是识别不出来具体哪段
  • pf_ring 5.4.0源码分析

    pf ring 5 4 0源码分析 pf ring是一款开源的高性能抓包库 项目的网址是 http www ntop org products pf ring 同经典的libpcap比较 pf ring提高性能的关键在以下三点 1 pf r
  • Kafka必须掌握的核心技术:java词法分析器代码

    二 常见的并发问题 1 脏读 一个事务读取了另一个事务未提交的数据 2 不可重复读 一个事务对同一数据的读取结果前后不一致 两次读取中间被其他事务修改了 3 幻读 幻读是指事务读取某个范围的数据时 因为其他事务的操作导致前后两次读取的结果不
  • 从今天起,将软件测试学习过程记录起来,一点一滴都要体现在这个博客中

    两年前 我开始做web开发 我的学习过程没有被记录下来 深感遗憾 今年2月28辞职 重新定了方向 做软件测试工作 我希望自己能在这里 记录自己技能成长的点点滴滴 既然选择了 路上再难 我也要坚持到底 不退缩
  • C++基础知识 - 纯虚函数与抽象类

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