C++的虚函数与纯虚函数

C++的虚函数是一种特殊的成员函数,用于实现多态性。虚函数允许在基类中声明一个函数,在派生类中根据需要进行重写,并通过基类指针或引用来调用派生类对象的特定实现。

①虚函数的声明

②多态性

③派生类重写虚函数

④纯虚函数

⑤注意


①虚函数的声明

在基类中,我们可以使用关键字virtual来声明一个虚函数。

class Base {
public:virtual void show() {cout << "This is the Base class." << endl;}
};

②多态性

通过将一个基类的指针或引用指向其派生类的对象,可以实现多态性。

通过将基类指针ptr指向派生类对象derivedObj,我们可以通过调用虚函数show()来实现多态性。运行时会根据实际对象的类型选择正确的实现。

Base* ptr;  // 基类指针
Derived derivedObj;  // 派生类对象ptr = &derivedObj;  // 将基类指针指向派生类对象// 调用虚函数,根据对象的实际类型执行不同的实现
ptr->show();

③派生类重写虚函数

派生类可以重写基类中的虚函数,以提供自己的实现。重写的函数必须具有相同的名称、返回类型和参数列表。

class Derived : public Base {
public:void show() override {cout << "This is the Derived class." << endl;}
};

④纯虚函数

虚函数也可以被声明为纯虚函数,即没有默认实现的虚函数。纯虚函数通过在声明中使用= 0来标识。包含纯虚函数的类称为抽象类,它不能实例化,只能作为基类来派生其他类。

class AbstractBase {
public:virtual void show() = 0;  // 纯虚函数
};

⑤注意

  • 虚函数只能在类的成员函数中使用。
  • 虚函数使用动态绑定,即运行时将根据对象的实际类型选择正确的函数实现。
  • 构造函数不能是虚函数。
  • 静态成员函数不能是虚函数。
  • 虚函数可以被继承,派生类可以选择是否重写虚函数。

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

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

相关文章

服务保护 Sentinel

服务保护 Sentinel Sentinel 介绍Sentinel 的下载使用Sentinel 流控规则流控规则介绍流控规则演示 Sentinel 热点规则Sentinel 隔离和熔断降级Feign 整合 Sentinel线程隔离熔断降级 Sentinel 授权规则Sentinel 系统规则Sentinel 自定义异常Sentinel 资源定义url 默认资源抛出异…

课程上新!5天学懂大数据框架Kafka

学习Kafka对于现代数据处理和分析至关重要。它能够帮助我们处理海量数据流&#xff0c;确保数据的可靠性&#xff0c;支持实时流处理&#xff0c;并且具有广泛的应用场景。通过掌握Kafka的知识和技能&#xff0c;我们可以在数据驱动的世界中更好地应对挑战&#xff0c;取得更大…

【力扣周赛】第 354 场周赛

文章目录 Q1&#xff1a;6889. 特殊元素平方和思路——简单模拟题竞赛时代码 Q2&#xff1a;6929. 数组的最大美丽值思路——差分数组&#xff0c;计算每个数字可能出现的次数竞赛时代码解法2——排序 双指针⭐解法3——排序 二分查找 Q3&#xff1a;6927. 合法分割的最小下标…

Linux 漏洞扫描

Linux 漏洞扫描程序会仔细检查基于 Linux 的系统&#xff0c;以减轻潜在的风险和漏洞。 什么是 Linux 漏洞扫描程序 Linux 漏洞扫描程序是一种专门的漏洞扫描工具&#xff0c;旨在识别基于 Linux 的系统中的安全漏洞和弱点,它会扫描配置错误、过时的软件版本和已知漏洞。 为…

pytorch学习--第一个模型(线性模型)

目标 我们想通过随机初始化的参数 ω , b \omega ,b ω,b能在迭代过程中使预测值和目标值能无限接近 y ω x b y\omega xb yωxb 定义数据 x torch.rand([60, 1])*10 y x*2 torch.randn(60,1)构建模型 利用pytorch中的nn.Module 想要构建模型时&#xff0c;继承这个类…

(四)「消息队列」之 RabbitMQ 路由(使用 .NET 客户端)

0、引言 先决条件 本教程假设 RabbitMQ 已安装并且正在 本地主机 的标准端口&#xff08;5672&#xff09;上运行。如果您使用了不同的主机、端口或凭证&#xff0c;则要求调整连接设置。 获取帮助 如果您在阅读本教程时遇到问题&#xff0c;可以通过邮件列表或者 RabbitMQ 社区…

Meta发布升级大模型LLaMA 2:开源可商用

论文地址&#xff1a;https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/ Github地址&#xff1a;https://github.com/facebookresearch/llama LLaMA 2介绍 Meta之前发布自了半开源的大模型LLaMA&#xff0c;自从LLaMA发布以来…

30、spring是什么

spring是什么? 1、轻量级的开源的J2EE框架。它是一个容器框架&#xff0c;用来装javabean (java对象)&#xff0c;中间层框架(万能胶)可以起一个连接作用&#xff0c;比如说把Struts和hibernate粘合在一起运用&#xff0c;可以让我们的企业开发更快、更简洁 2、Spring是一个…

win11安装.net framework 3.5

背景 安装专业软件时需要.net framework 3.54错误代码&#xff1a;0x80072f8f控制面板安装失败microsoft安装失败DISM安装依旧失败 解决方法 下载win11 iso文件 下载网址 note:不能挂v p niso文件装载后&#xff0c;找到*\sources\sxs路径复制文件夹到新建路径&#xff0c;这…

C# WPF实现动画渐入暗黑明亮主题切换效果

C# WPF实现动画渐入暗黑明亮主题切换效果 效果图如下最近在Bilibili的桌面端看到一个黑白主题切换的效果感觉&#xff0c;挺有意思。于是我使用WPF尝试实现该效果。 主要的切换效果&#xff0c;基本实现不过还存在一些小瑕疵&#xff0c;比如字体等笔刷不能跟随动画进入进行切…

Docker简介

Docker简介 文章目录 Docker简介一、Docker1.什么是docker?2.容器引擎3.容器和虚拟机的区别4.namespace&#xff08;命名空间&#xff09;5.三大容器核心概念镜像容器仓库 二、Docker镜像操作1.搜索镜像2.获取镜像镜像加速下载 3.查看本地下载镜像4.获取镜像详细信息5.为本地镜…

代码随想录第二十二天

代码随想录第二十二天 Leetcode 235. 二叉搜索树的最近公共祖先Leetcode 701. 二叉搜索树中的插入操作Leetcode 450. 删除二叉搜索树中的节点 Leetcode 235. 二叉搜索树的最近公共祖先 题目链接: 二叉搜索树的最近公共祖先 自己的思路:乍一看和二叉树的最近公共祖先类似&#…

SQL 上升的温度

197 上升的温度 SQL架构 表&#xff1a; Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是这个表的主键 该表包含特定日期的温度信息 编写一个 SQL …

事务@transactional执行产生重复数据

背景 系统设计之初&#xff0c;每次来新请求&#xff0c;业务层会先查询数据库&#xff0c;判断是否存在相同的id数据&#xff08;id是唯一标识产品的&#xff09;&#xff0c;有则返回当前数据库查到的数据&#xff0c;根据数据决定下一步动作&#xff0c;没有则认为是初次请…

销售自动化如何提高团队生产力?从这5个方面发力

任何用于减少人工劳动和缩短销售流程相关任务时间的技术&#xff0c;都可定义为销售自动化。 对于忙碌的销售人员来说&#xff0c;流程自动化是真正的救星。它可以使他们的工作简化30%&#xff0c;让他们更专注于创收任务。这将显著提高团队的工作效率&#xff0c;并带来许多其…

Kubernetes - kubeadm部署(二)

kubeadm 1. docker 和 containerd1.1 命令区分1.2 常用命令1.3 关于crictl 2. 示例2.1 部署nginx 先从一个报错开始吧 [rootnode-129 kubernetes]# crictl ps WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/…

滑动奇异频谱分析:数据驱动的非平稳信号分解工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

django中的model的一些笔记

class WarehouseRecordDetail(models.Model):warehouse_record models.ForeignKey(WarehouseRecord, verbose_nameu"出入库记录",related_namewarehouse_record_detail_ref_warehouse_record, on_deletemodels.PROTECT)warehouse_stock_record models.ForeignKey(W…

师承AI世界新星|7天获新加坡南洋理工大学访学邀请函

能够拜师在“人工智能10大新星”名下&#xff0c;必定可以学习到前沿技术&#xff0c;受益良多&#xff0c;本案例中的C老师无疑就是这个幸运儿。我们只用了7天时间就取得了这位AI新星导师的邀请函&#xff0c;最终C老师顺利获批CSC&#xff0c;如愿出国。 C老师背景&#xff1…

Leetcode刷题4

⼆叉树、BFS、堆、Top K、⼆叉搜索树、模拟、图算法 一、二叉树 二叉树的前序中序后序 二叉树节点定义 为了方便演示&#xff0c;我们先定义一个二叉树节点类。 class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right r…