当前位置: 首页 > news >正文

C++笔记之虚函数重写规则、返回类型协变、函数的隐藏

C++笔记之虚函数重写规则、返回类型协变、函数的隐藏

code review!

文章目录

  • C++笔记之虚函数重写规则、返回类型协变、函数的隐藏
    • 1.返回类型协变
    • 2.C++中函数的隐藏

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

—— C++ Primer Plus (第6版)


在这里插入图片描述

在这里插入图片描述

—— cppreference

1.返回类型协变

在这里插入图片描述

2.C++中函数的隐藏

在C++中,函数的隐藏是指在派生类中定义了与基类中的函数名称相同但参数列表不同的函数,从而隐藏了基类中的同名函数。这种情况下,派生类中的函数将会隐藏基类中的同名函数,使得在使用该函数时,编译器将只看到派生类中的函数而忽略基类中的函数。

函数的隐藏在C++中遵循以下规则:

  1. 当派生类中的函数名称与基类中的函数名称相同,但是参数列表不同(包括参数类型、个数或顺序)时,基类中的函数会被隐藏。
  2. 如果派生类中没有与基类中同名函数的情况下,则不会发生隐藏,基类中的函数会被正常继承到派生类中。
  3. 如果希望在派生类中同时使用基类中的同名函数,可以通过using声明来显式地引入基类函数,例如:using Base::functionName;
  4. 隐藏只在名称查找时发生,而不会影响函数的重载。也就是说,派生类可以定义与基类中同名但参数列表不同的多个函数,它们不会相互隐藏。

以下是一个简单的示例,展示了函数的隐藏:

在这里插入图片描述

在这个示例中,Derived 类中的 show(int x) 函数隐藏了基类 Base 中的 show() 函数。通过 using Base::show; 声明,我们可以显式地调用基类的函数。

请注意,函数的隐藏是一种容易导致混淆和错误的情况,因此在设计派生类时,应该尽量避免使用与基类函数同名但参数列表不同的函数。

代码

#include <iostream>class Base {
public:void show() {std::cout << "Base::show()" << std::endl;}
};class Derived : public Base {
public:void show(int x) {std::cout << "Derived::show(int)" << std::endl;}
};int main() {Derived derived;derived.show(); // 编译错误,因为Derived中的函数隐藏了Base中的函数derived.Base::show(); // 使用using声明,显示调用Base类中的函数derived.show(5);      // 调用Derived类中的函数return 0;
}

相关文章:

C++笔记之虚函数重写规则、返回类型协变、函数的隐藏

C笔记之虚函数重写规则、返回类型协变、函数的隐藏 code review! 文章目录 C笔记之虚函数重写规则、返回类型协变、函数的隐藏1.返回类型协变2.C中函数的隐藏 —— C Primer Plus &#xff08;第6版&#xff09; —— cppreference 1.返回类型协变 2.C中函数的隐藏 在C中&a…...

抢鲜体验!vLive虚拟直播5大实用新功能上线!

vLive虚拟直播系统2.6.2版本全新上线&#xff01;新版本一共更新了5项实用功能&#xff0c;能让你的直播操作更加方便。现在就跟随小编一起来看看吧&#xff01; 1.本地下载场景支持一键迁移 用户下载后的场景可以直接迁移至另一个磁盘&#xff0c;无需重复下载。 2.信号源添加…...

网约车平台如何开发?需要多少钱?

随着共享经济的兴起&#xff0c;网约车行业迅速发展&#xff0c;并成为人们生活中不可或缺的一部分。为了满足市场需求和提供更好的服务&#xff0c;开发一款高质量的网约车源码平台至关重要。本文将深入探讨网约车源码平台的开发方案&#xff0c;从技术架构、安全性和用户体验…...

Rust踩雷笔记(5)——刷点链表的题(涉及智能指针Box,持续更新)

目录 leetcode 2 两数相加——模式匹配单链表Box 只能说Rust链表题的画风和C完全不一样&#xff0c;作为新手一时间还不太适应&#xff0c;于是单独为链表、智能指针开一篇&#xff0c;主要记录leetcode相关题型的答案以及注意事项。 leetcode 2 两数相加——模式匹配单链表Bo…...

[附源码]计算机毕业设计-JAVA火车票订票管理系统-springboot-论-文-ppt

PPT论文 文章目录 前言一、主要技术javaMysql数据库JSP技术 二、系统设计三、功能截图总结 前言 本论文主要论述了如何使用JAVA语言开发一个火车订票管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想…...

CARLA spawn Actor (Vehicle and Pedestrian)

1. Spawn Vehicles 2. Spawn Pedestrian References [1] Carla简单入门-1 基本的API使用 - 知乎 [2] https://carla.org/2019/07/12/release-0.9.6/...

【官方中文文档】Mybatis-Spring #SqlSessionFactoryBean

SqlSessionFactoryBean 在基础的 MyBatis 用法中&#xff0c;是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。而在 MyBatis-Spring 中&#xff0c;则使用 SqlSessionFactoryBean 来创建。 设置 要创建工厂 bean&#xff0c;将下面的代码放到 Spring 的 XML …...

el-tree树回显删除某项,再次点开树形组件无变化,实际数据已改变

el-tree树回显删除某项&#xff0c;再次点开树形组件无变化&#xff0c;实际数据已改变 页面有添加和删除已选选项的按钮&#xff0c;点击删除一个选项&#xff0c;再点添加&#xff0c;打开树形弹窗&#xff0c;发现弹窗被删除的选项还在 原因&#xff1a; 发现是添加的时候&…...

生产作业标准化是什么?生产车间作业流程标准化的步骤

生产作业标准化是以精益化为目标&#xff0c;对现行作业方法进行量化细化的分析改善&#xff0c;最终形成优化后的更好的作业程序。标准化的作用主要是以文件的方式保存企业成员积累的技术和经验&#xff0c;而不是因为人员的流动而失去整个技术和经验。 生产作业标准化的实施非…...

CSS3盒模型+flex

1.盒模型 标准盒模型: wwidthpaddingborderhheightpaddingborder 怪异盒模型(ie盒模型) wwidth包含了(paddingborder)hheight包含了(paddingborder) 2.CSS3弹性盒(重点新版弹性盒) 弹性盒: 设置为弹性盒后,父元素为容器,子元素为项目弹性盒中存在两根轴,默认水平为主轴,垂…...

物种气候生态位动态量化与分布特征模拟

在全球气候快速变化的背景下&#xff0c;理解并预测生物种群如何应对气候变化&#xff0c;特别是它们的地理分布如何变化&#xff0c;已经变得至关重要。利用R语言进行物种气候生态位动态量化与分布特征模拟&#xff0c;不仅可以量化描述物种对环境的需求和适应性&#xff0c;预…...

微服务参数透传实现

说明&#xff1a;在微服务架构中&#xff0c;用户身份经网关验证后&#xff0c;我们可以将用户信息&#xff0c;如ID加入到请求头上。后面的微服务中&#xff0c;可以设置一个拦截器&#xff0c;拦截请求&#xff0c;获取请求头上的用户ID&#xff0c;加入到ThreadLocal中。 最…...

leetcode 767. Reorganize String(重组字符串)

重新排列字符串s中的字母&#xff0c;使得任意两个相邻的字母都不相同。 思路&#xff1a; 让相邻字母不同&#xff0c;能想到的办法是先把相同的字母排列&#xff0c; 然后在相同字母的缝隙中插入另一种字母。 比如"aab", 先把"a a"排出来&#xff0c;再…...

java八股文面试[数据结构]——List和Set的区别

List和Set是用来存放集合的接口&#xff0c;并且二者都继承自接接口Collection List 中的元素存放是有序的&#xff0c;可以存放重复的元素&#xff0c;检索效率较高&#xff0c;插入删除效率较低。 Set 没有存放顺序不能存放重复元素检索效率较低&#xff0c;插入删除效率较…...

脑机接口里程碑!一天2篇Nature!

2023年8月23日&#xff0c;《Nature》期刊一口气发表了两项独立的脑机接口方向的研究。 一项来自加州大学旧金山分校华裔科学家张复伦团队&#xff0c;另一项来自斯坦福大学的神经科学家弗朗西斯威利特(Francis Willett)团队。两项研究都旨在帮助那些因脑损伤和疾病而失去语言能…...

C语言strchr函数

描述 strchr函数用于在一个字符串中查找某个字符的第一次出现的位置。 函数的声明&#xff1a; char * strchr(const char *s, int c); 其中&#xff0c;s是要进行查找的字符串&#xff0c;c是要查找的字符。函数返回指向第一次出现字符 c 的指针&#xff0c;如果未找到&…...

Linux下的Shell基础——Shell概述和入门(一)

前言&#xff1a; Shell还是一个功能相当强大的编程语言&#xff0c;易编写、易调试、灵活性强。为了方便后续的学习&#xff0c;我们需要学习在Linux系统下的Shell编程 目录 一、Shell概述 1.Linux 提供的 Shell 解析器有 2. 默认的解析器是 bash 二、Shell 脚本入门 1.脚…...

当你在浏览器中输入了网址访问时产生了哪些技术步骤

当你在浏览器中输入了网址访问时产生了哪些技术步骤 前段时间在知乎上了看一些网络方面的知识&#xff0c;刚好小编自己也是从事这一块的相关工作由对网络方面有一定的了解。今天我们来讲讲&#xff0c;当你在浏览器中输入本站域名并回车后&#xff0c;这背后到底发生来什么事…...

嵌入式Linux人脸检测libfacedetection

人脸检测 此库依赖Opencv&#xff0c;所以首先要移植Opencv到板子上。 笔者使用LVGL搭建了一个界面&#xff0c;界面有些卡顿&#xff08;主要原因是文件存取较慢&#xff09;&#xff0c;演示效果如下&#xff1a; OpenCV 首先要交叉编译Opencv 参考&#xff1a;https://…...

Hugo托管到Github Pages

Github通过其Github Pages服务可以user、project或organization提供免费快速的静态托管&#xff0c;同时使用Github Actions自动化开发工作流和构建。 1.创建Github仓库 可见性为public。 命名为username.github.io&#xff0c;username为你的Github用户名。 2.添加远程仓库…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...