C++基础之纯虚函数

2023-11-19

一.纯虚函数的定义

纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。C++中的纯虚函数,一般在函数名后使用=0作为此类函数的标志。

前面已经讲解了虚函数,虚函数可以在基类中实现,但是纯虚函数不能在基类中实现,且必须在子类中实现。

二.纯虚函数的作用

1、为了方便使用多态特性,我们常常需要在基类中定义虚函数。
2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。为了解决上述问题,引入了纯虚函数的概念。
纯虚函数的格式:virtual ReturnType Function()= 0;

三.纯虚函数实例演示

class A {
public:
    void fun()
	{
		cout<<"普通函数"<<endl;
	}
    virtual void fun1()=0;
};

class B:public A{
	virtual void fun1()
	{
		cout<<"派生类fun1函数"<<endl;
	}
};
int main()
{
	A*a=new B();
	a->fun();
	a->fun1();
	return 0;
}

结果:
在这里插入图片描述
分析:其实纯虚函数是虚函数的一种,只是纯虚函数不能在基类中实现,而在派生类中必须实现。

四.总结

1.纯虚函数是虚函数的一种。
2.纯虚函数不能在基类中实现功能,且定义格式为virtual ReturnType Function()= 0。
3.基类中的纯虚函数必须在子类中实现

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

C++基础之纯虚函数 的相关文章

  • 对静态成员变量的未定义引用

    我有一个有静态成员的类 它也是我的程序中其他几个类的基类 这是它的头文件 ifndef YARL OBJECT HPP define YARL OBJECT HPP namespace yarlObject class YarlObject
  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • 使用 JSON 格式正确配置 NLog 到 IHostBuilder

    我有以下代码 应该接受 NLog 的 JSON appsettings 配置 然后使用它来创建 NLog LogFactory 这个 NLog 工厂应该被传递到 MyService 类中 以便在那里创建一个记录器 class Program
  • 使用预编译头减少 clang 编译时间

    我正在开发一个数据库项目 该项目将查询 以某种高级语言表示 编译为 C 代码 这段代码由数据库编译并执行 那部分工作得很好 现在 我正在尝试减少 C 查询代码的编译时间 我想知道是否可以使用预编译头来提高性能 该查询被转换为一个名为 Que
  • StreamReader,C#,peek

    我有一个 StreamReader 它偶尔会检查它是否有更多内容可以从简单的文本文件中读取 它使用 peek 属性 问题是 当我使用 peek 时 位置发生了变化 尽管不应该发生 FileStream m fsReader new File
  • 在 C++ 中使用表达式模板进行符号微分

    如何在 C 中使用表达式模板实现符号微分 一般来说 您需要一种表示符号的方法 即编码的表达式模板 例如3 x x 42 以及一个可以计算导数的元函数 希望您对 C 中的元编程足够熟悉 知道这意味着什么和需要什么 但可以给您一个想法 This
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 按值返回的函数的返回语句中的初始化

    我的问题源于深入研究std move in return语句 例如以下示例 struct A A std cout lt lt Constructed lt lt this lt lt std endl A A noexcept std c
  • ASP.NET MVC 中 ModelState.AddModelError 中的关键参数有什么意义?

    我在我的控制器中添加了验证检查来修改ModelState如果验证失败 例如 private bool ValidateMoney string raw string name decimal min decimal max try var
  • printf() 使用字符串表“解码器环”调试库

    我写这封信是想看看你们中是否有人见过或听说过我即将描述的想法的实现 我有兴趣为嵌入式目标开发 printf 风格的调试库 目标非常遥远 并且我和目标之间的通信带宽预算非常紧张 因此我希望能够以非常有效的格式获取调试消息 通常 调试语句如下所
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • 数组与映射的性能

    我必须循环一个大数组中的元素子集 其中每个元素都指向另一个元素 问题来自于检测大图中的连接组件 我的算法如下 1 考虑第一个元素 2 将下一个元素视为前一个元素所指向的元素 3 循环直到没有发现新元素 4 考虑1 3中尚未考虑的下一个元素
  • TreeView:仅在子节点中存在复选框

    我需要一个树视图控件 根节点没有复选框 只有图像 所有子节点都有一个复选框 图像 C net 2 0 winforms 不是 wpf WinForms树视图默认不支持混合复选框 非复选框节点 您可以在树视图上全局启用复选框 并使用以下命令在
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

    我正在开发一个 C WinForms 应用程序 我希望能够 预览 其中的各种文档类型 也就是说 当用户从列表中选择文件名时 它会在下面以相同的形式显示所选文件的预览 这很像 Outlook 允许您无需双击即可预览选定邮件的方式 有没有什么方
  • 获取会议组织者邮件地址 EWS API

    我想使用 EWS API 获取会议组织者的邮件地址 目前 我刚刚获得约会项目的一些属性 我听说你可以设置你想要获取哪些属性 我的代码看起来像这样 CalendarView cview new CalendarView start end c

随机推荐

  • Python 安装 Numpy 出现 错误:只允许在 C99 模式下使用‘for’循环初始化声明 用gcc编译出现

    在Liunx 离线安装 Numpy 时候 python setup py install 用gcc编译出现 错误 只允许在 C99 模式下使用 for 循环初始化声明 然后执行命令 CC gcc std c99 python setup p
  • 解决-画图程序无法读取-无效的位图文件

    辛苦画的图 今天一打开就看到这个 心情是呵呵的 搜了一下大概是图太大了 右击win10自带的图片 给裁剪小了就OK了
  • 《精通Spring4.x 企业应用开发实战》第20章 实战型单元测试

    前言 TestNG是必须事先掌握的基础测试框架 大多数测试框架和测试工具都在此基础上扩展而来 Spring测试框架为集成 TestNG JUnit 等单元测试框架提供了很好的支持 并为测试 Spring 应用提供了许多基础设施 在项目单元测
  • 互联网摸鱼日报(2023-03-11)

    互联网摸鱼日报 2023 03 11 InfoQ 热门话题 架构师 2023 年 3 月 世界级编程大师Bob 大叔为 干净代码 辩护遭质疑 时代变了 别用Clean Code那套要求我们了 从传统数据库痛点看分布式数据库选型问题 API
  • linux学习课程从入门到精通:Centos8用户管理

    本人从事IT行业已有十多年 有着丰富的实战经验 总结了大量的学习方法 更是积累了很多的学习资料 很高兴能在这里跟大家交流学习 希望能在这里跟大家共同进步和成长 全套学习资料移步至公众号 学神来啦 更多学习资料添加扣扣资源群 66130895
  • Compiler- 自增运算

    我们来看一下C语言中的前自增 i 和后自增 i 这个经典案例 大家在学习C的时候肯定学过前自增是先自增 然后将结果用于计算 后自增是先参与计算 再增加 好 看一下这段代码的结果 include
  • 数据结构_二元组

    今天在牛客网上看到这样一个题目 当时做的时候直接没反应过来 后来看解析的时候 才知道 二元组 图论上学过嘛 而且 我们以前也经常接触 图 V E 就是嘛 下面的解释转载自 https www cnblogs com larryzeal p
  • Python Flask怎么实现前后端分离

    你可以在 Flask 中使用 ajax 和 JSON 来实现前后端分离 首先 在 Flask 中创建一个视图函数 它会返回一个 JSON 响应 例如 app route api data def get data data key valu
  • 卷积神经网络改进想法初探(上篇)

    最近一直在看卷积神经网络 想改进改进弄出点新东西来 看了好多论文 写了一篇综述 对深度学习中卷积神经网络有了一些新认识 和大家分享下 其实卷积神经网络并不是一项新兴的算法 早在上世纪八十年代就已经被提出来 但当时硬件运算能力有限 所以当时只
  • Java并发编程之设计模式

    同步模式之保护性暂停 1 定义 即 Guarded Suspension 用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程 让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线
  • MIPI-DSI 协议深度解析-简单易懂协议详解

    1 MIPI MIPI 移动行业处理器接口 是 Mobile Industry Processor Interface 的缩写 MIPI 移动行 业处理器接口 是 MIPI 联盟发起的为移动应用处理器制定的开放标准 DCS DisplayC
  • vue项目history模式刷新404问题

    vue项目history模式部署到服务器后 根路径访问没有问题 但是进入其他功能再刷新页面就会出现404 因为你没在nginx或者apache配置上面加上重定向跳转 解决办法 只需要加上这段配置 nginx配置内容 location try
  • DNS详解

    1 背景 DNS 是 Domain Name System 的缩写 即域名系统 DNS可以理解是将域名 如 www baidu com 和IP地址进行相互映射的一个分布式数据库 人直接去记忆IP地址数串是相当困难的 像是电话号码 记忆常用的
  • VUE+js高德地图2.0API两幅地图联动同步缩放

  • 主机上连接到 vmware虚拟机的方式

    我们平时只有一台电脑 但是练习时需要有多台电脑 那么此时应该怎么办 答案是下载 vmware 可以在上面创建多台虚拟机 至于如何创建 不是本文的重点 下面先说说桥接是如何设置的 首先 进入配置好的虚拟机下面 选择 虚拟机 设置 网络适配器
  • NLP-实体&关系联合抽取-2021:GPLinker

    基础思路 关系抽取乍看之下是三元组 s p o s p o s p o 即subject pre
  • spi总线挂载多个设备的设备树描述

    内核版本 linux4 6 Vivado版本 201602 工程中用到很多spi控制的从设备 首先对FPGA工程的正确性验证一下 验证的设备树描述如下 spi e0006000 compatible xlnx zynq spi r1p6 r
  • 内存大页及基本块

    大页内存 透明大页和大页的关系 这两者最大的区别在于 标准大页管理是预分配的方式 而透明大页管理则是动态分配的方式 内存页的概念 内存页 page 内存的最小分配单元 page gt 一个应用程序至少要使用一个内存页 4096B 4k li
  • k8s学习(五)ReplicaSet的使用

    ReplicaSet ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合 可确保指定数量的pod在任何设定的时间运行 因此 它通常用来保证给定数量的 完全相同的 Pod 的可用性 示例 1 nginx
  • C++基础之纯虚函数

    一 纯虚函数的定义 纯虚函数是一种特殊的虚函数 在许多情况下 在基类中不能对虚函数给出有意义的实现 而把它声明为纯虚函数 它的实现留给该基类的派生类去做 这就是纯虚函数的作用 C 中的纯虚函数 一般在函数名后使用 0作为此类函数的标志 前面