C++ 类和对象下 [补充]
文章目录
- 友元
- 内部类
- 内部类是外部类的天生友元
- 匿名对象
- 匿名对象的特性
- 拷贝对象时的一些编译器优化
- 函数返回值临时空间的存储位置
- 返回值临时空间具有常性
- 标题相同和不同类型 需要 临时空间
友元
-
友元函数
重载operator<< 输出自定义类型
比如日期类的这个重载,就是解决类外访问私有变量的例子,设计成了友元函数。
说明:
友元函数可访问类的私有和保护成员,但不是类的成员函数
友元函数不能用const修饰 (没有this指针,无法修饰) -
友元类
友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员
用法:
class Time
{friend class Date; // 声明日期类为时间类的友元类,则在日期类中就直接访问Time类中的私有成
员变量
public:Time(int hour = 0, int minute = 0, int second = 0): _hour(hour), _minute(minute), _second(second){}private:int _hour;int _minute;int _second;
};
class Date
{
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}void SetTimeOfDate(int hour, int minute, int second){// 直接访问时间类私有的成员变量_t._hour = hour;_t._minute = minute;_t._second = second;}private:int _year;int _month;int _day;Time _t;
};
内部类
概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类
- 问题:sizeof(A) = ?

回答:sizeof( A ) = 4
因为B在A的内部,其实他们之间没什么关系,只不过是B这个类型定义在A的类域里,没有B的实例化对象不占空间,类是图纸,如果A的成员变量里面 有个 B的实例化对象,那就占空间了。
static int k; 在静态区里,也不占空间。
class B 受访问限定符的控制,你可以公开权限,突破A类域生成B对象,如果是私有权限那么创建不了B对象

形象化:就是A是一个建筑图纸,那么B就是A图纸里面附赠的一份图纸
内部类是外部类的天生友元

匿名对象
例子1

A() 也可以这么写
例子2

这里面Solution().Sum_Solution(20)
我看了一开始也觉得奇怪,但是如果不加只剩类型,Solution.Sum_Solution(20)肯定无法调用
所以要加括号表明 是匿名对象
错误写法(不加括号):

这里又回溯回之前 类创建对象时为什么不加括号的问题:
原因:默认构造初始化对象 不能写成 Solution s1();的原因是 无法区分是函数还是初始化对象

匿名对象的特性
匿名对象生命周期在当前行
用引用强行续命,延长了生命周期在当前局部域
匿名对象具有常性(和临时空间一样具有常性)

拷贝对象时的一些编译器优化
不同编译器对连续构造的优化不同, Linux下优化可能更加极致
拷贝构造+拷贝构造 ->优化为拷贝构造
构造+拷贝构造 ->优化为构造
如图看到连续的构造尽量写到一行,避免分开写更麻烦同时也干扰了编译器优化,导致效率变低(没有写成一行导致没有优化)

函数返回值临时空间的存储位置
函数传值返回,如果返回的对象很大,那么它所保存在的临时空间是在哪里呢? 答:返回对象时内置类型时,一般都是通过寄存器来带回返回值的,返回对象如果时较大的对象时,一般会在主调函数的栈帧中开辟一块空间,然后把这块空间的地址,隐式传递给被调函数,在被调函数中通过地址找到主调函数中预留的空间,将返回值直接保存到主调函数的。 具体可以参考《程序员的自我修养》一书的第10章。

知道了保存在了主调函数,也就是main函数里,那么可以解释一下析构的顺序:
按理说在一个函数内创建对象 是符合栈规则后进先出,但是这个情况是临时空间先入的栈,只不过是后拷贝构造,Func3()里的A aa其实在栈中临时空间的上面(函数栈帧中把栈倒了过来向上增长,其实实际是向下增长),那么自然就是先析构A aa,后再析构临时空间

返回值临时空间具有常性
const A& ra = Func5();
既然临时空间保存在了主调函数,加了const是临时空间具有常性。生命周期也在局部范围,如果没有使用这块临时空间它也会在这一行结束生命,也算是一种续命了。

标题相同和不同类型 需要 临时空间
相关文章:
C++ 类和对象下 [补充]
文章目录 友元内部类内部类是外部类的天生友元 匿名对象匿名对象的特性 拷贝对象时的一些编译器优化函数返回值临时空间的存储位置返回值临时空间具有常性 标题相同和不同类型 需要 临时空间 友元 友元函数 重载operator<< 输出自定义类型 比如日期类的这个重载ÿ…...
[CTF/网络安全] 攻防世界 PHP2 解题详析
[CTF/网络安全] 攻防世界 PHP2 解题详析 index.php.phps扩展名姿势 翻译:你能给这个网站进行身份验证吗? index.php index.php是一个常见的文件名,通常用于Web服务器中的网站根目录下。它是默认的主页文件名,在访问一个网站时&am…...
图神经网络:(节点分类)在Cora数据集上动手实现图神经网络
文章说明: 1)参考资料:PYG官方文档。超链。 2)博主水平不高,如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 代码实操1:GCN的复杂实现代码实操2:GCN的简单实现…...
RabbitMQ应用问题——消息补偿机制以及代码示例
RabbitMQ应用问题——消息补偿机制以及代码示例 RabbitMQ应用问题 消息可靠性的保障 消息补偿机制 详细说明 这里使用了简单的代码进行演示,订单的消费者没有写,在订单的消费同时,发送一条增加积分消息到积分队列。 详细流程途中都有注明…...
量化特征贡献度函数:feature_importances_函数/LGBMClassifier/XGBClassifier
feature_importances_是scikit-learn机器学习库中许多模型对象的属性,在训练模型之后调用该属性可以输出各个特征在模型中的重要性。 示例代码: from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import make_regression# 生…...
总结JVM重要知识点
一.类加载和创建对象的过程 1.类加载 1.编译 : 将源码文件(.java)编译成JVM可以解释的.class文件 . 语法分析>语义分析>注解处理 , 生成class文件 2.加载 : 装载 : 字节码本来存储在硬盘上 , 需要运行时 , 有类加载系统负责将类的信息加载到内存中(方法区) , 使用的是类…...
奇技淫巧第8期
学无止境。 下面是对去年11月至今年5月的零散知识点总结。 春节期间好好放松了一两个月,来校后又懒散的度过了一两个月,直到论文评审意见下来,才开启冲刺模式狂干了一两个月。总的来说,这半年来摸的时间比较多。好,不废…...
这个 归并排序详解过程 我能吹一辈子!!!
文章目录 归并排序概念归并排序算法思路归并排序递归实现归并排序非递归实现 归并排序概念 1945年,约翰冯诺依曼(John von Neumann)发明了归并排序,这是典型的分治算法的应用。 归并排序(Merge sort)是建立…...
docker版jxTMS使用指南:自动生成代码
本文讲解4.0版jxTMS的自动生成代码功能, 整个系列的文章请查看:docker版jxTMS使用指南:4.0版升级内容 docker版本的使用,请参考:docker版jxTMS使用指南 任何一个管理系统都需要对管理对象进行管理,包括最…...
聚观早报 | 小冰启动GPT克隆人计划;ofo创始人在美创业改做咖啡
今日要闻:小冰启动“GPT克隆人计划”;ofo创始人在美创业改做咖啡;OpenAI正准备新的开源AI模型;青年失业率首破20%创新高;微软收购动视暴雪获批 小冰启动“GPT克隆人计划” 5 月 16 日,小冰公司…...
面试造航母,入职拧螺丝,工资离了个大谱...
有粉丝跟我吐槽说:金三银四去面试软件测试岗,真的是面试造航母,入职拧螺丝,工资还低 这种现象很正常,因为找一个测试员,当然希望他能做的业务越多越好,最好像机器猫一样,啥事儿都能…...
Python+selenium自动化元素定位防踩坑
在自动化UI测试过程中常常会在元素定位阶段就踩坑,碰到困扰已久的问题。 以下是个人整理元素定位报错原因和解决方法。 踩坑一:StaleElementReferenceException selenium.common.exceptions.StaleElementReferenceException: Message: stale element re…...
【计算机组成原理】实验一
文章目录 实验一 数据传送实验1. 实验目的2. 实验仪器3. 原理概述4. 实验内容步骤4.1 手动实验环境的建立4.2 手控传送实验 5. 实验结论及问题讨论 实验一 数据传送实验 1. 实验目的 2. 实验仪器 3. 原理概述 4. 实验内容步骤 4.1 手动实验环境的建立 1)初始待令状态 上电或…...
前端022_广告模块_修改功能
广告模块_修改功能 1、需求分析2、Mock添加查询数据3、Mock修改数据4、Api调用回显数据5、提交修改后的数据6、效果1、需求分析 需求分析 当点击 编辑 按钮后,弹出编辑窗口,并查询出分类相关信息进行渲染。修改后点击 确定 提交修改后的数据。 2、Mock添加查询数据 请求URL…...
makefile 学习(3):C++的编译及库文件的生成与链接
1. 介绍 C语言的相关后缀 .a 文件是一个静态库文件.c,.c ,.cp,.cpp,.cc,.cxx 这几种后缀都可以表示c的源文件.h ,.hpp c语言的头文件.i 是c预处理文件.o 目标文件.s汇编语言的文件.so 动态库或者共享库或者称为运行时库 2. C编译 2.1 预处理 g -E helloworld.cpp # 虽…...
Ceph crush运行图
Crush map介绍 ceph集群中由monitor负责维护的运行图包括: Monitor map:监视器运行图osd map:osd运行图PG map:PG运行图Crush map:crush运行图Mds map:mds运行图 crush map是ceph集群物理拓扑的抽象&…...
【分布族谱】泊松分布和二项分布、正态分布的关系
文章目录 泊松分布和二项分布的关系和正态分布的关系 泊松分布 如果在有限时间 ( 0 , 1 ) (0,1) (0,1)内进行 n n n次伯努利实验,那么每次伯努利实验所占用的时间为 1 n \frac{1}{n} n1,按照自然规律,一件事情肯定是时间越长越容易发生&am…...
关于QTreeWidget的setData函数
当使用 Q T r e e W i d g e t I t e m QTreeWidgetItem QTreeWidgetItem 的 s e t D a t a setData setData 方法时,需要传递三个参数,分别是列索引、角色和数据。 列索引:表示要设置数据的列的索引。 Q T r e e W i d g e t I t e m QTre…...
Microsoft Office 2003的安装
哈喽,大家好。今天一起学习的是office2003的安装,这个老版本的office可是XP操作系统的老搭档了,有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统:Windows XP 不建议win7及以上操作系统使用 系统类型ÿ…...
使用Spring Boot和Spring Cloud实现多租户架构:支持应用多租户部署和管理
使用Spring Boot和Spring Cloud实现多租户架构:支持应用多租户部署和管理 一、概述1 什么是多租户架构?2 多租户架构的优势3 实现多租户架构的技术选择 二、设计思路1 架构选型1.1 Spring Boot1.2 Spring Cloud 2 数据库设计3 应用多租户部署3.1 应用隔离…...
C 语言从 0 入门(十一)|指针基础:定义、解引用、指针与变量
大家好,我是网域小星球。 前面我们学习了数组、函数、变量等基础内容,代码能力已经可以完成大多数基础程序。而从这一篇开始,我们正式进入 C 语言最核心、最具特色、也是最难的知识点:指针。 指针是 C 语言的灵魂,也…...
如果给你10亿条id数据让你去重,你会怎么做?
如果给你10亿条id数据让你去重,你会怎么做? 最近在刷一些其他题库的题,发现遇到一些类似的问题甚至是相同的题还是会卡住,我觉得我需要转变一下思路,总结一下一类题的算法,而不是每天写一道题的解题思路&am…...
不止于Secure Boot:深入英飞凌TC3XX HSM内核,解锁CAN FD安全通信与调校保护
不止于Secure Boot:深入英飞凌TC3XX HSM内核,解锁CAN FD安全通信与调校保护 在智能网联汽车的高速发展中,车载电子系统的安全防线正面临前所未有的挑战。传统ECU架构中,主处理器既要处理实时控制任务,又要承担安全运算…...
从传统WinForm到现代化桌面应用:SunnyUI如何重塑C开发体验
从传统WinForm到现代化桌面应用:SunnyUI如何重塑C#开发体验 【免费下载链接】SunnyUI SunnyUI.NET 是基于.NET Framework 4.0、.NET6、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。 项目地址: https://gitcode.com/gh_m…...
从自动驾驶到AR眼镜:棋盘格标定法在工业与消费级应用中的实战差异
从自动驾驶到AR眼镜:棋盘格标定法在工业与消费级应用中的实战差异 在计算机视觉领域,棋盘格标定法就像一把瑞士军刀——看似简单的黑白方格图案,却能解决从工业机器人精准定位到手机AR测量等截然不同的视觉难题。但有趣的是,同样是…...
圆柱状螺旋时空几何框架下引力与电磁力的统一关系初探完整定稿版
圆柱状螺旋时空几何框架下引力与电磁力的统一关系初探完整定稿版圆柱状螺旋时空几何框架下引力与电磁力的统一关系初探完整定稿版计立伟,张祥前(1. 独立物理研究所,深圳 518000;2. 独立物理研究者,安徽 庐江 231500&am…...
RAGFlow服务报错排查:如何快速解决429 Too Many Requests错误
RAGFlow服务429错误全链路诊断与高可用架构设计实战 第一次在RAGFlow日志里看到"HTTP 429 Too Many Requests"时,我正端着咖啡准备验收新上线的智能文档分析系统。监控大屏突然变红的那一刻,整个运维团队的手指都悬在了键盘上方——这个看似简…...
5分钟搞定:用mkcert为Vue/Uniapp项目快速配置本地HTTPS(附常见问题排查)
前端开发者必备:5分钟为Vue/Uniapp项目配置本地HTTPS全指南 现代前端开发中,越来越多的浏览器API要求运行在HTTPS环境下才能正常工作,比如摄像头访问、地理位置获取、Service Worker等。这给本地开发带来了不小的挑战——我们既需要HTTPS环境…...
geo优化软件系统好用的服务商
在当今数字化时代,GEO优化软件系统对于企业的重要性日益凸显。它能够帮助企业根据地理位置信息精准地推送广告、优化业务流程,从而提高营销效果和运营效率。那么,市场上有哪些好用的GEO优化软件系统服务商呢?今天我们就来一探究竟…...
2026年4月AI编程工具选型指南:先问自己一个问题,是搭项目还是写代码?
先问自己:你在哪个阶段?AI编程工具越来越卷,Cursor 3.0、Claude Code Agent Teams、Gemini Code Assist免费入场——工具多到选不过来。但选错工具的本质原因,往往不是工具不够好,而是问错了问题。选工具之前ÿ…...
