【C++】类和对象终章 --内部类和匿名对象,再识类和对象

欢迎来到CILMY23的博客

🏆本篇主题为: 类和对象终章 --内部类和匿名对象,再识类和对象

🏆个人主页:CILMY23-CSDN博客

🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux

🏆感谢观看,支持的可以给个一键三连,点赞关注+收藏。


✨写在前头:

一个月我们终于来到类和对象终章了,本篇我们将结束类和对象的学习,剩下的语法是内部类和

匿名对象,这两部分语法较为简单。


内部类

1.1 内部类的概念

如果一个类定义在另一个类的内部这个类中类就叫做内部类。这种类也被称为嵌套类。内部类是一个独立的类, 它不属于外部类更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。

例如:

//内部类
class A
{
public://B是内部类//B这个类受到A类的限制class B{private:int _a3;};private:int _a1;int _a2;
};int main()
{A aa;//定义内部类的对象A::B bb;return 0;
}

注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访 问外部类中的所有成员。但是外部类不是内部类的友元。

 例如:

//内部类
class A
{
public://B是内部类//B是A的友元,这意味着B能够访问A的私有成员//但A不是B的友元,这意味着A不能访问B的私有成员//B这个类受到A类的限制class B{public://B能访问Avoid func(A* p1){p1->_a1++;}private:int _a3;};//不能访问void funB(B* p2){p2->_a3++;}private:int _a1;int _a2;
};

1.2 内部类的特点

 特性:

  1. 内部类可以定义在外部类的public、protected、private都是可以的。
  2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
  3. sizeof(外部类)=外部类,和内部类没有任何关系。

 匿名对象

2.1 匿名对象的概念

匿名对象是没有名称的对象。在编程中,通常当一个对象仅需要被使用一次时会创建匿名对象。它们是即时生成并使用的,通常用于直接调用方法或访问属性后即被丢弃,不需要再次引用。

例如:

//匿名对象
class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A() {cout << "~A()" << endl;} 
private:int _a;
};int main()
{//有名对象A aa1;A aa2;//匿名对象A();A(11);return 0;
}

2.2 匿名对象的特点

  1. 匿名对象的生命周期只在当前这一行,通常用于只需要一次使用的场景。它们在创建后立即用于某个操作,然后就不再使用。
  2. 在不需要为对象命名的情况下,使用匿名对象可以节省命名资源,尤其是在命名较为困难或者希望避免命名冲突的场景中。
  3. 由于匿名对象没有名称,所以在创建它们之后无法再次被引用。这意味着如果你需要再次使用同一个对象,那么匿名对象就不适用。

再识类和对象 

现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。如果想要让计算机认识现 实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创 建对象后计算机才可以认识。比如想要让计算机认识洗衣机,就需要:

  • 1. 用户先要对现实中洗衣机实体进行抽象---即在人为思想层面对洗衣机进行认识,洗衣机有什 么属性,有那些功能,即对洗衣机进行抽象认知的一个过程
  • 2. 经过1之后,在人的头脑中已经对洗衣机有了一个清醒的认识,只不过此时计算机还不清 楚,想要让计算机识别人想象中的洗衣机,就需要人通过某种面相对象的语言(比如:C++、 Java、Python等)将洗衣机用类来进行描述,并输入到计算机中
  • 3. 经过2之后,在计算机中就有了一个洗衣机类,但是洗衣机类只是站在计算机的角度对洗衣 机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算机才 能洗衣机是什么东西。
  • 4. 用户就可以借助计算机中洗衣机对象,来模拟现实中的洗衣机实体了。 

类是对某一类实体(对象)来进行描述的,描述该对象具有哪些属性,哪些方法,描述完成后就形成了一种新的自定义类型才用该自定义类型就可以实例化具体的对象。 


💡总结

1️⃣如果一个类定义在另一个类的内部这个类中类就叫做内部类。内部类受到外部类类域的限制。

2️⃣内部类就是外部类的友元类,内部类可以访问外部类的私有成员,但是外部类不能访问内部类的私有成员。

3️⃣sizeof(外部类)=外部类,和内部类没有任何关系。

4️⃣匿名对象的生命周期只在当前这一行,通常用于只需要一次使用的场景。


类和对象往期文章:

发布日期主题名称链接
2024.04.19

C语言转型之路:从C到C++的类与对象初探

链接
2024.04.23类和对象初探:类的实例化与对象生命周期管理,解析this指针的奥秘链接
2024.04.25C++中的构造函数和析构函数详解链接
2024.04.29构造函数、析构函数在局部、静态以及全局的调用和释放顺序链接
2024.05.01拷贝复制:拷贝构造函数的使用链接
2024.05.03深入浅出C++中深拷贝和浅拷贝链接
2024.05.06

赋值运算符重载,为什么默认实现可能不够?

链接
2024.05.07用C++实现一个日期计算器链接
2024.05.09C/C++中新const用法:const成员链接
2024.05.13再识构造函数:初始化列表新方式链接
2024.05.14类的新成员:static成员和类的好朋友:友元链接

感谢各位同伴的支持,本期C++就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,关注+收藏,若有不足,欢迎各位在评论区讨论。   

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

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

相关文章

51单片机超声波测距_液位检测_温度检测原理图PCB仿真代码

目录 实物图&#xff1a; PCB ​原理图​ 仿真图 ​编辑 程序 资料下载地址&#xff1a;51单片机超声波测距-液位检测-温度检测原理图PCB仿真代码 主控为stc89c52,通过ds18b20进行温度采集&#xff0c;超声波测距&#xff0c;距离不可以超过1m&#xff0c;通过按键可以设…

CAD插入文字到另一图形样式变相同

CAD从一张图形复制到另外一张图形后&#xff0c;文字样式变成一样是因为两张图所用的文字样式名称一样&#xff0c;但是样式里面的使用字体样式不一样。如下图所示&#xff0c;找到工具栏中的注释 &#xff0c;点击文字样式。里面就会显示当前图形中使用的样式名称及其对应的字…

拓扑排序板子

经过一晚上的不懈努力,创造出了一个很烂的拓扑排序的板子 这是精简版 using ll long long; struct tsort {int n;std::vector<std::vector<int>>g, w;std::vector<int>r, c, dp,f;std::queue<int>q;tsort(int n_) {n n_;g.resize(n 1);w.resize(…

Java内存详解

内存区域、内存模型 内存区域&#xff1a;即运行时数据区域&#xff0c;指JVM对于不同类型数据在内存中的存储方式内存模型&#xff08;JMM&#xff1a;Java Memory Model&#xff09;&#xff1a;定义了线程与主内存之间的抽象关系&#xff0c;即JVM在内存中的工作方式&#…

微信小程序如何使用weui组件库?

一、方法一&#xff1a;通过npm安装 通过npm构建方式引入weui组件库 &#xff08;找到.eslintrc.js 右键&#xff0c;在内件终端打开&#xff09;打开命令提示符后&#xff0c;输入 &#xff08;1&#xff09;npm init -y来快速生成一个默认的package.json文件 &#xff08;…

鸿蒙 装饰器@builder 使用中的问题 以及解决方案

builder装饰器 一 介绍Builder装饰器&#xff1a;自定义构建函数二 问题点三 解决方法四 仓库地址 一 介绍Builder装饰器&#xff1a;自定义构建函数 用于填充UI组件 开发者可以将重复使用的UI元素抽象成一个方法&#xff0c;在build方法里调用。 根据场景分类 组件内自定义构…

设计非递归算法,编程:在二叉排序树中,打印关键码a, b的公共祖先。注:例,若a是b的祖先,则a不算作公共祖先。反之亦然。

二叉排序树&#xff1a; 代码&#xff1a; #include <iostream> using namespace std;// 定义二叉树节点结构 typedef struct BTNode {char show;struct BTNode* left;struct BTNode* right; } BTNode;// 非递归插入节点的函数 BTNode* insertNode(BTNode* root, char k…

Leetcode - 周赛397

目录 一&#xff0c;3146. 两个字符串的排列差 二&#xff0c;3147. 从魔法师身上吸取的最大能量 三&#xff0c;3148. 矩阵中的最大得分 四&#xff0c;3149. 找出分数最低的排列 一&#xff0c;3146. 两个字符串的排列差 本题就是求同一个字符在两个字符串中的下标之差的…

QCustomPlot的了解

&#xff08;一&#xff09;QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现-CSDN博客 关键代码&#xff1a; QT core gui printsupport 使用上面文章中的代码跑起来的程序效果图&#xff1a; 我的学习过程&#xff1a; 最开始初…

家用充电桩远程监控安全管理系统解决方案

家用充电桩远程监控安全管理系统解决方案 在当今电动汽车日益普及的背景下&#xff0c;家用充电桩的安全管理成为了广大车主关注的重点问题。为了实现对充电桩的高效、精准、远程监控&#xff0c;一套完善的家用充电桩远程监控安全管理系统解决方案应运而生。本方案旨在通过先…

如何去除字符串两侧的空白字符?

TRIM函数会去掉字符串左侧和右侧的空格&#xff0c;语法是&#xff1a;TRIM(字符串) excel中&#xff0c;TRIM函数能去掉字符串左侧和右侧的空格&#xff0c;它的ASCII码是32。 以下设定一个字符串组合&#xff0c;它的第一个字符中空格&#xff0c;最后一个字符是换行符 &q…

Python专题:十七、做个小游戏

终端小游戏 1、根据题库内容出单选题 2、提示作答&#xff0c;并给结果 思路 列表 保存题目 字典 保存题干&#xff0c;选项和答案 遍历 题目列表用于展示 input函数 等待用户输入 判断输入&#xff0c;并继续提示 计算正确率并打印 题库…

oracle不得不知道的sql

一、oracle 查询语句 1.translate select translate(abc你好cdefgdc,abcdefg,1234567)from dual; select translate(abc你好cdefgdc,abcdefg,)from dual;--如果替换字符整个为空字符 &#xff0c;则直接返回null select translate(abc你好cdefgdc,abcdefg,122)from dual; sel…

【Linux进程通信 —— 管道】

Linux进程通信 —— 管道 进程间通信介绍进程间通信的概念进程间通信的目的进程间通信的本质进程间通信的分类 管道什么是管道匿名管道匿名管道的原理pipe用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则管道的特点管道的四种特殊情况管…

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…

三子棋游戏

1、实现三子棋 test.c //测试游戏的逻辑 game.c //游戏代码的实现 game.h //游戏代码的声明&#xff08;函数声明&#xff0c;符号定义&#xff09; 1、 在主函数里实现&#xff0c;首先有个界面&#xff0c;让玩家选择是否玩游戏。上来就先打印菜单&#xff0c;用do ... …

优秀测试的核心能力!2招高效定位分析BUG!

之所以写这一篇文章&#xff0c;是突然想起来曾经在测试过程中被开发嘲讽过&#xff0c;事情是这样的&#xff0c;当时发现了一个疑似前端的Bug就草草提交到了禅道&#xff0c;结果刚来的女前端看到了就有点生气地问我为啥不查清到底是前后端问题就直接派给她前端了&#xff0c…

【python量化交易】—— Alpha选股策略 - Qteasy自定义交易策略【附源码】

使用qteasy创建并回测Alpha选股交易策略 使用qteasy创建并回测Alpha选股交易策略策略思想第一种自定义策略设置方法&#xff0c;使用持仓数据和选股数据直接生成比例交易信号PS信号&#xff1a;第二种自定义策略设置方法&#xff0c;使用PT交易信号设置持仓目标&#xff1a;第三…

【数组中重复的数据】leetcode,python

和上题一样&#xff0c;【找到所有数组中消失的数字】 换个判断条件就行 class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:nlen(nums)for i in nums:x(i-1)%nnums[x]n#只需要替换条件即可return [i1 for i,num in enumerate(nums) if num>(2*n)…

第十四节 huggingface的trainner的_inner_training_loop函数源码解读

文章目录 前言一、self.get_train_dataloader()函数1、self.get_train_dataloader()函数完整源码2、dataset与dataloadera、dataset与dataloader来源b、dataset与dataloader处理c、self._get_collator_with_removed_columns()函数获得collate_fn3、self._get_train_sampler()采…