3.0C++虚函数

news2024/11/25 22:29:27

C++ 虚函数

C++的虚函数是一种特殊的成员函数,可以在派生类中被重写。

虚函数的作用是实现多态性,当我们使用基类指针或引用来调用虚函数时,程序会根据实际的对象类型来调用相应的派生类函数。

我们可以将一个成员函数声明为虚函数,只需要在函数声明前加上关键字 virtual 即可。

比如这样:

在这里插入图片描述
C++ 虚函数案例

为方便读者理解,我写个虚函数 demo:

在这里插入图片描述
在上述我写的 demo 中,我定义了一个基类 Shape 和一个派生类 Circle,其中 Shape 类中的 draw() 函数被声明为虚函数。

在主函数中,我分别使用基类指针 shape1 和派生类指针 shape2 来调用 draw() 函数。

编译运行结果:
在这里插入图片描述
C++ 虚函数注意事项

虚函数只能是类的成员函数,不能是静态成员函数或全局函数。

构造函数和析构函数不能是虚函数,因为它们的调用顺序是确定的,不需要动态确定。

如果一个类中有虚函数,它必须有至少一个虚函数被实现,否则编译器会报错。

在派生类中重写虚函数时,函数签名必须与基类中的虚函数完全相同,否则编译器会报错。

如果派生类中重写虚函数时不使用 override 关键字,编译器会给出警告,但不会报错。

虚函数的调用会带来额外的开销,因为程序需要在运行时查找正确的函数地址。因此,在程序中过多地使用虚函数可能会影响性能。

如果在基类中将虚函数声明为纯虚函数,派生类必须实现该函数,否则派生类也会成为抽象类,无法实例化。

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

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

相关文章

C++primer(第五版)第六章(函数)

6.1函数基础 函数可以理解成是可以循环使用的代码块.函数的定义通常包含以下部分:返回类型,函数名称,参数列表,函数体. //以下是一个返回值为int类型,有两个参数的函数的定义 int add(int a,int b){return ab; }我们用调用运算符( )来执行函数,在运算符内传入参数.调用时会打…

如何确保大模型追求“正确”的目标?丨AI安全与对齐圆桌回顾

导读 在智源大会「AI 安全与对齐」论坛上,与会嘉宾针对目前人们关心的 AI 安全控制标准、多智能体强化学习环境下的安全、开源对 AI 安全的影响、对智能涌现安全的思考等问题展开了讨论。 能力越大,责任越大。 嘉宾名单 谢旻希丨主持人,安远A…

高压线路距离保护程序逻辑原理(一)

为了保证高压线路输电的稳定性和可靠性,通常要求高压电网构成多侧电源的环形电网。在这种电网中简单的电压电流保护往往不能满足保护的基本要求,例如方向电流保护往往不能保证有选择性地切除故障。为此,在多侧电源的环形电网的线路上配置了选…

使用Nexus搭建Maven私有库实战

本篇快速演示如何搭建和使用Nexus本地库, 关于Nexus 的基本使用参考: Nexus搭建Maven私有库介绍 实战场景 本篇的实际场景是: 本地开发机器可以连接外部网络测试或正式部署环境只能连接内网项目使用了内部开发的组件库 在搭建搭建Maven私…

如何一次解决两大难题,不用写注释,也不会被他人吐槽没有注释呢?

如何一次解决两大难题,不用写注释,也不会被他人吐槽没有注释呢? 导读为什么要减少代码中的注释量呢?一、无用型的注释二、絮絮叨叨的注释三、代替代码分层的注释四、不知所云的注释 参考:阿里云开发者社区…

【vs2022】解决 “对程序集签名是出错 - 拒绝访问 ”

背景 拿到一个工程,编译时报错:“对程序集签名是出错 - 拒绝访问” 解决方法 ”C:\ProgramData\Microsoft\Crypto\RSA”目录下面,找到【MachineKeys】文件夹。 右键【MachineKeys】文件夹,在安全属性里面,将当前win…

DETR系列:RT-DETR(一) 论文解析

论文:《DETRs Beat YOLOs on Real-time Object Detection》 2023.4 DETRs Beat YOLOs on Real-time Object Detection:https://arxiv.org/pdf/2304.08069.pdf 源码地址:https://github.com/PaddlePaddle/PaddleDetection/tree/develop/conf…

江西五十铃汽车PMO经理苏建受邀为第十二届PMO大会演讲嘉宾

江西五十铃汽车有限公司PMO经理苏建先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:PMO全链路建设促进组织变革——传统汽车行业0-1PMO最佳实践探索。大会将于8月12-13日在北京举办,敬请关注! 议题简要&…

LangChain:LLM应用程序开发(上)——Models、Prompt、Parsers、Memory、Chains

文章目录 一、Models、Prompt、Parsers1.1 环境配置(导入openai)1.2 辅助函数(Chat API : OpenAI)1.3 使用OpenAI API进行文本翻译1.4使用LangChain进行文本翻译1.5 使用LangChain解析LLM的JSON输出1.5.1 LangChain输出为string格…

基于人体姿势估计的舞蹈检测(AI Dance based on Human Pose Estimation)

人体姿势骨架以图形格式表示人的方向。本质上,它是一组坐标,可以连接起来描述人的姿势。骨架中的每个坐标都被称为一个部分(或一个关节,或一个关键点)。两个部分之间的有效连接称为一对(或分支)。下面是一个人体姿势骨架样本。 因此&#xff…

mysql基础3——数据备份与恢复、破解数据库密码

文章目录 一、备份方案二、备份工具mysqldump2.1 备份整张表数据2.2 备份整个库数据 三、全量备份四、差异备份五、数据库密码破解 一、备份方案 备份方案概念特点全量备份对某一个时间点上的所有数据或应用进行完全拷贝。数据恢复快,备份时间长。增量备份在一次全…

抓住重点,谋定而后动

一、我们平常项目有哪几种 有两种常规项目、大项目 1.常规项目 技术团队的重心是把执行做到位,你要更关注过程管控,确保系统交付 2.大项目: 什么是大项目,他有什么特点 大项目时间投入大、人员规模大、系统更大,复…

ResourceBundle读取properties文件

ResourceBundle 常用API 方法签名方法描述public Locale getLocale()获取本地国际化环境ppublic Enumeration getKeys()获取属性文件中所有keypublic final String getString(String key)获取属性文件中key对应的value, 返回值为String, 如果不存在, 则抛出异常public final O…

STM32文档

一、寄存器缩写 二、存储器和总线构架 DMA,全称为:Direct Memory Access,即直接存储器访问 简而言之,DMA就是将一个内存里的数据搬运到另一个内存里,此过程无需CPU直接控制输出 系统架构存储器组织存储器映射&#xf…

解密:Prompt、Token、和completions是什么?

Prompt、Token、和completions 本文是科普向,大家放心阅读 在ChatGPT越来越火的时候,很多开发者都想大展拳脚,但在这之前,我们需要了解一些基础知识,比如你知道什么是token、什么是prompt、什么是Complemention Pro…

vue下基于elementui自定义表单-后端数据设计篇

vue下基于elementui自定义表单-后端篇 自定义表单目前数据表单设计是基于数据量不大的信息单据场景,因为不考虑数据量带来的影响。 数据表有: 1.表单模版表,2.表单实例表,3.表单实例项明细表,4表单审批设计绑定表 以FormJson存…

chatgpt赋能python:关于Python的常见问题及解决方法

关于Python的常见问题及解决方法 在编程领域中,Python已经成为了最流行的编程语言之一。然而,在使用Python编写代码时,难免会遇到一些问题。在本文中,我们将介绍一些常见的Python问题以及如何解决它们。 编码问题 在Python中&a…

idea项目名旁边还有一个项目名——idea笔记

问题描述 我们常常因为想改项目名但是没有改完全从而出现了项目名旁边还有一个项目名 例如: 解决方案: 打开File->project structure 修改前: 修改后:

【数据挖掘】时间序列教程【一】

第一章 说明 对于时间序列的研究,可以追溯到19世纪末和20世纪初。当时,许多学者开始对时间相关的经济和社会现象进行研究,尝试发现其规律和趋势。其中最早的时间序列研究可以追溯到法国经济学家易贝尔(Maurice Allais)…

微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群 Sentinel

微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游 分布式搜索引擎03 1.数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎&#x…