C++友元命名空间数据类型内联重载缺省

news2025/1/12 10:37:17

1.友元

(1)全局函数作为友元

利用友元这个语法,我们可在函数里访问类里面定义的私有成员;

先定义了一个默认构造函数对类里面的成员进行初始化;goodgay是一个全局的函数,我们想要直接打印私有成员变量就会报错,我们只需要把这个全局函数的定义的第一行放到类里面去,在前面加上friend关键字就可以访问类里面的私有的成员变量bedroom了;

(2)类作友元

上面的这段代码比较长,可能比较复杂,但是并不是很难理解,我们首先从main函数开始阅读,调用了test01函数,这个函数会使用我们的goodgay实例化一个对象gg,我们让这个对象调用函数visit;我们使用goodgay实例化对象首先就要调用它的默认的构造函数,这个函数里面我们在堆区为我们创建的building1指针开辟空间;

visit函数想要访问building类里面的成员,我们是可以访问他的公共的成员的,但是我们不能访问私有的成员,我们只有在buiding这个类定义里面添加frieng class goodgay这句话,我们才可以在visit函数里面访问building类里面的私有的成员;

其实仔细观察我们就可以发现,我们在goodgay这个类里面定义了building类型的指针,这个时候就已经是在一个类里面使用另外的一个类进行定义了,所以我们的goodgay里面的函数visit可以访问building类里面的公共成员;另外,我们需要注意的就是我们这个是在类的外面去写对应的构造函数,我们在累的里面必须要进行相应的声明,而且在类的外面,我们需要先使用类名加上两个冒号指明接下来要写的函数是属于哪个类的;

(3)成员函数作友元

成员函数就是类里面的函数,这个函数要想成为友元,做法基本上是和我们的第一个的全局函数的操作方法基本是一样的,不同点就在于我们的成员函数是在一个指定的类里面的,我们需要标明函数的作用域,也就是函数的前面要加上类的名字和两个冒号;

2.命名空间

(1)上面的就是命名空间的一种定义的方法,我们使用namespace加上空间的名字来定义我们的命名空间,上面就是我们自己进行定义的两个命名空间,命名空间的存在的意义就是可以增加标识符的使用率,减少编程的过程中因为命名冲突而产生的影响,我们的命名空间里面定义的变量和函数就属于这个命名空间;

(2)命名空间只能够在全局区域里面进行使用,不能在主函数里面使用,我们在主函数里面初始化命名空间里面的变量和函数的调用的时候,都要注明对应的命名空间,这个时候就要使用的是::他的名字叫做作用域分辨符;我们使用这个符号就可以进行相应的函数的调用和变量的初始化

(3)我们如果感觉每次都这样做很麻烦,我们可以先使用using namespace说明对应的命名空间,这样就可以省略对应的作用域了,我们需要注意的就是当多次进行省略的时候,我们需要防止产生二义性,就是像我们这个图片里面的报错一样,我们的两个命名空间里面的变量和函数都是一样的,这个时候编译器就无法知道我们想要调用哪个,因此我们需要注意这种情况,但是如果我们使用命名空间::作用域分辨符::变量这种写法,就一定不会出错;

(4)作用域分辨符还有一个用法就是之前我们了解到的面对局部变量和全局变量相同时,会优先打印的是局部变量,我们使用预作用分辨符就可以打印全局变量,示例如下:效果显而易见

3.C++里面新的数据类型

(1)指针&&布尔类型

原来我们学习的C语言里面的空指针是NULL,在C++里面,我们使用nullptr代表空指针;

bool类型我们之前也接触过,num我们赋值的是大写的字母A,只要不是0就表示的是真的,我们打印输出这个布尔类型的数据,打印的结果就是1(实际上布尔类型的数据的打印的结果只能是0或者1),我们使用sizeof计算大小,布尔类型的数据只会占一个字节,大大的节省了我们的内存空间

(2)引用类型

引用可以作为函数的参数

引用就是取别名,这个别名的符号和我们的取地址的符号是完全一样的,但是我们不要往取地址上面去想,我们就理解为取别名就可以了;

这段代码是先让指针p指向的是num=10;然后改变指针的指向,我们的函数传递的是p指针,我们是使用&temp来进行接受的,这个里面两者的数据类型要相互匹配,同样是int*类型,后面加上&表示这个temp是一个引用的类型,实际上temp就是p指针的别名;我们修改temp的指向相当于修改的是p指针的指向,我们让temp指针指向ret这个全局变量,相当于是p指针指向了这个全局变量,当我们的函数调用完成的时候,我们对p指针姐应用,就得到的是全局变量ret的值100;

引用可以作为返回值

我们的自定义函数print返回的是一个全局变量,不能返回一个局部的变量,因为局部变量的空间可能会被释放掉,我们的引用作为返回值相当于是返回了一个变量,因此我们可以放在等式的左边,但是普通的不带引用的函数的返回值解释一个数值,如果放在等式的左边就会报错,因为左边是必须可以修改的才行;

下面的是右值引用(理解即可):

右值引用的要求是必须传递常量,而且主函数里面给函数传递的实参必须是常量,不能是变量,我们的函数里面,可以对形参的值进行改变。

4.内联函数

内联函数是指使用inline修饰的函数,这个函数变成内联函数之后,就可以提高程序的运行的效率

(1)内联函数是以以空间换时间;

(2)短小精悍的函数才可以成为内联函数,因为这个函数一旦成为内联函数之后,就会以二进制代码的方式存储在内存里面,如果我们的函数的代码很长,就会导致这个转化之后的二进制的代码量非常大,这个就无法凸显其作为内联函数的优势了;

(3)我们在结构体里面定义的函数和类里面定义的函数默认为内联函数;

比如说我们在写OJ的时候,出现程序的运行时间过长,如果符合内联函数的使用条件,我们就可以把这个函数转换为内联函数,这样就可以提高程序的运行效率,具体是提高了多少,我们使无从得知的;

5.函数重载

允许同名但是不同参数的函数存在:参数不同可以是参数的个数不同,参数的顺序不同,参数的数目不同;

根据我们的主函数里面的传参,编译器会自动识别参数类型,自动匹配相对应的函数;

6.函数缺省

必须从右边向左边进行缺省:

如果我们调用的时候,给了参数,计算的时候就会使用我们传递过去的参数,如果没有给定参数,编译器就会使用默认的参数。当两者同时存在的时候,我们自己传递过去的值的优先级高于默认值

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

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

相关文章

订单到期关闭如何实现

在电商、支付等系统中,一般都是先创建订单(支付单),再给用户一定的时间进行支付,如果没有按时支付的话,就需要把之前的订单(支付单)取消掉。这种类似的场景有很多,还有比…

仓库管理系统哪个好用?看仓储出入库系统如何智慧管理库存-亿发

企业中的仓库扮演着至关重要的角色,负责产品的存储和分发。作为物流的重要节点,仓库不仅需要确保产品安全存放,还要保证及时的配送服务。同时,仓库还需要完成货物信息记录、库存管理和品质管理等任务。因此,仓储管理的…

DFS专题:二叉树的最大深度

力扣题目:二叉树的最大深度 题目链接: 104.二叉树的最大深度 题目描述 代码思路 设置两个变量,max来记录最大值,sum来记录路径的节点数量。利用dfs对二叉树进行搜索,遇到节点,则sum1;遇到叶子节点&#…

数据恢复如何工作?电脑最佳数据恢复软件分析

数据丢失是数字世界不合适的部分,迟早会影响许多计算机用户。 如果您不小心 #delete 了重要的 #file,可能很难找回它并造成不必要的压力。 点击发推文 幸运的是,即使您没有备份已删除的文件,PC的数据恢复软件也可以帮助您恢复已…

昂科烧录器支持Nuvoton新唐科技的低功耗微控制器M482SIDAE

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中Nuvoton新唐科技的低功耗微控制器M482SIDAE已经被昂科的通用烧录平台AP8000所支持。 M482SIDAE以Arm Cortex-M4F为核心,是带有DSP指令集的高效能低功耗微控制器。其…

WPF Extended.Wpf.Toolkit 加载界面

1、NuGet 中安装 Extended.Wpf.Toolkit 。 2、在MainWindow.xaml中添加xmlns:tk"http://schemas.xceed.com/wpf/xaml/toolkit" 。 MainWindow.xaml 代码如下。 <Window x:Class"WPF_Extended_Wpf_Toolkit_Loading.MainWindow" xmlns"ht…

apipost、postman等工具上传图片测试flask、fastapi的文件api接口

参考&#xff1a;https://blog.csdn.net/qq_15821487/article/details/119354129 https://www.cnblogs.com/wyxjava/p/16076176.html 选择from-data&#xff0c;下拉选择file上传文件发送即可

【动态规划 区间dp 位运算】3117. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode3117. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数组…

vscode设置conda默认python环境,简单有效

本地conda 可能安装了各种环境&#xff0c;默认的vscode总是base环境&#xff0c;这时你想要在vscode调试python代码&#xff0c;使用默认的环境没有安装对应的包就会遇到报错解决这个问题的方法很简单ctrlshiftp 调出命令面板 再输入 select interpreter , 选择 python 选择解…

在Spring Boot中使用POI完成一个excel报表导入数据到MySQL的功能

最近看了自己玩过的很多项目&#xff0c;忽然发现有一个在实际开发中我们经常用到的功能&#xff0c;但是我没有正儿八经的玩过这个功能&#xff0c;那就是在Spring Boot中实现一个excel报表的导入导出功能&#xff0c;这篇博客&#xff0c;主要是围绕excel报表数据导入进行&am…

一例Mozi僵尸网络的挖矿蠕虫分析(workminer)

概述 这是一个Linux平台的挖矿蠕虫&#xff0c;使用了go和C混合编译而成&#xff0c;主要通过爆破SSH口令进行传播&#xff0c;属于Mozi僵尸网络。其中GO代码负责SSH相关的爆破传播&#xff0c;以及对Config的处理&#xff0c;C代码则负责处理加入Mozi P2P网络&#xff0c;拉取…

c++11 标准模板(STL)本地化库 - 平面类别(std::collate) - 定义字典序比较和字符串的散列(二)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字典序比较和字符串的散列 std::collate 类 std::collate 封…

Redis的Stream 和 实现队列的方式【List、SortedSet、发布订阅、Stream、Java】

Redis队列与Stream、Redis 6多线程详解 Redis队列与StreamStream总述常用操作命令生产端消费端单消费者消费组消息消费 Redis队列几种实现的总结基于List的 LPUSHBRPOP 的实现基于Sorted-Set的实现PUB/SUB&#xff0c;订阅/发布模式基于Stream类型的实现与Java的集成 消息队列问…

MySQL高级(索引-性能分析-profile)

show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪去了。通过 have_profiling参数&#xff0c;能够看到当前MySQL 是否支持 profile 操作&#xff1a; select have_profiling 默认 profiling 是关闭的 select profiling; 可以通过 set 语句在 session / global 级…

【python】flask操作数据库工具SQLAlchemy,详细用法和应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

萌新_1 环境安装(基于QQNT框架 Python Flask)

遇到问题加QQ群聊 群主在线解答 点击加入群聊【星辰开发】 一&#xff1a;安装QQ 目前为开发&#xff0c;推荐都安装到一台电脑上 直接安装到本地windows电脑&#xff0c; 优点方便开发 一键安装 Windows 用户一键安装方案 https://github.com/super1207/install_llob/rel…

从零到一品牌电商私域流量代运营规划方案

【干货资料持续更新&#xff0c;以防走丢】 从零到一品牌电商私域流量代运营规划方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT共50页&#xff08;完整资料包含以下内容&#xff09; 目录 私域运营方案&#xff1a; 一、项目背景与目标 - 开创数智化…

kaggle电子邮件分类xgboost建模可视化模型评估混淆矩阵范例

目录 概述 依赖环境 代码解读 库的导入 数据读取 扇形图可视化统计 词云图可视化 分布条形图可视化 数据预处理 划分数据集 模型训练 模型预测和评估 ROC曲线评估 混淆矩阵评估 多维度交叉评估 配套源码和数据集 xgboost邮件分类配套数据集和源码下载地址 概述…

RK3568 学习笔记 : u-boot 千兆网络功能验证

前言 开发板型号&#xff1a; 【正点原子】 的 RK3568 开发板 使用 虚拟机 ubuntu 20.04 编译 RK3568 Linux SDK&#xff0c;生成镜像&#xff0c;烧写后&#xff0c;Linux 系统正常启动 开启后可以使用 CTRLC 进入 u-boot 本篇验证一下 u-boot 下网络功能 【正点原子】 rk…

OpenHarmony 视图缩放组件—subsampling-scale-image-view

简介 深度缩放视图&#xff0c;图像显示&#xff0c;手势平移缩放双击等 效果图&#xff08;旋转、缩放、平移&#xff09; 下载安装 ohpm install ohos/subsampling-scale-image-view OpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考如何安装 OpenHarmony ohpm 包 使…