【c++初阶】类与对象(下)

请添加图片描述

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌟🌟 追风赶月莫停留 🌟🌟
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
🌟🌟 平芜尽处是春山🌟🌟
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅

🍋类与对象

  • 🍑构造函数(知识点补充)
    • 🍍初始化列表
    • 🍍explicit关键字
  • 🍑static成员
    • 🍍概念
    • 🍍特性
  • 🍑友元
    • 🍍友元函数
    • 🍍友元类
  • 🍑内部类
    • 🍍概念
    • 🍍特性
  • 🍑类与对象的理解

🍑构造函数(知识点补充)

上篇已经讲到了构造函数的大部分知识点,在这里有几个新知识点需要大家了解。

🍍初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。

我们已经知道了默认构造函数:

在这里插入图片描述

上篇中已经讲到,全缺省构造函数也是属于默认构造函数。

初始化列表也是与构造函数有关:

在这里插入图片描述
上图就是初始化列表的写法,初始化列表主要是在构造函数中实现。

大家注意书写格式。

平常的我们在函数体内初始化,那叫函数体初始化。两者各有各的优点和缺点。

引用和const和自定义类型没有构造函数时等修饰需要在初始化列表定义,不能在函数体内定义。两种写法可以混着使用,符合规则即可。

总结:

  1. 必须有定义的地方显示初始化“引用、const、没有默认构造的自定义成员类型”。
  2. 有些自定义成员想要显示初始化,可以自己控制。
  3. 初始化列表初始化的顺序是按声明顺序走的。

🍍explicit关键字

构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值的构造函数,还具有类型转换的作用。

大家应该都知道类型转换,平常的类型转换我们都看到,比如:

int a = 1;
float c = (float)a;

c是float类型,a是int类型,而当我们需要把a的值赋给c时,就需要先把a转换成float类型,然后再传给c。

再看看这个程序:
在这里插入图片描述
在这个程序当中,我没有给a进行类型转换,就已经传给c了,并且运行成功了。这是为什么呢? 这是因为在系统内部进行了隐式类型转换,实际上在a传过去的那一刻,a已经是float类型了,我们看不到。

explicit关键字它的功能也与这隐式转换有关,不过它是起限制隐式转换的作用。

接下来看这个代码:

在这里插入图片描述
大家应该很疑惑,为什么100可以直接赋给Add类的vv,100是int类型,而vv是Add类型,并且是一个类。其实在这里是进行了隐式转换。

如:在这里插入图片描述
从100赋给vv是分为两步,第一步就是构造,然后中间有一个Add类的临时变量来接受100,此时100就从int类型到Add类型的转换,第二步就是拷贝构造,临时变量把100传给了vv。

大家可以看看显示转换的写法:

//第一种写法
Add vv = Add(100);
//第二种写法
Add vv(100);

上面就是显示转换的写法。

在这里插入图片描述
加了explicit后,就会报错,explicit限制了隐式类型的转换。

在这里插入图片描述
显示转换没有收到影响。

用explicit修饰构造函数,将会禁止构造函数的隐式转换。

🍑static成员

🍍概念

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。

静态成员有一个显著的特点,那就是它们不属于某一个特定的对象,而是属于整个类,也就是说,无论创建了多少个类的对象,这些对象都共享同一个静态成员。因此,静态成员可以被视为连接各个对象的桥梁。

当然还有一点,静态成员变量一定要在类外进行初始化。

🍍特性

  1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
  2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
  3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
  4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
  5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制

🍑友元

友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,并在说明时前面加上关键字“friend”,以区别于该类的成员函数。尽管友元不是类的一部分,但它可以访问类中的私有成员,从而打破了类的封装性和隐藏性。这种设计的目的通常是为了提高程序的运行效率,减少类型和安全性检查及调用的时间开销。

友元分为友元函数和友元类。

🍍友元函数

  1. 友元函数可以直接访问类的私有成员。
  2. 它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。

注意

  1. 友元函数可访问类的私有和保护成员,但不是类的成员函数
  2. 友元函数不能用const修饰
  3. 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
  4. 一个函数可以是多个类的友元函数
  5. 友元函数的调用与普通函数的调用原理相同

🍍友元类

友元类是一种特殊的类关系,在C++中定义,它允许一个类(友元类)访问另一个类(宿主类)的私有成员(包括私有成员变量和私有成员函数)。当一个类作为另一个类的友元时,这意味着这个类的所有成员函数都是另一个类的友元函数,可以访问另一个类中的隐藏信息。

友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

  1. 单向性:友元关系是单向的,不具有交换性。即,如果类B是类A的友元,类A不一定是类B的友元。这是因为在类中是否有相应的声明决定的。
  2. 非传递性:友元关系也不具有传递性。即,如果类B是类A的友元,类C是类B的友元,类C不一定是类A的友元。这同样取决于类中是否有相应的声明。
  3. 访问权限:友元类可以访问宿主类的所有成员,包括私有成员和保护成员,而不受类的访问限定符限制。
  4. 声明位置:友元的声明通常放在类的定义中,位于public、protected和private之外。

🍑内部类

🍍概念

在C++中,内部类(也称为嵌套类)是定义在另一个类的作用域内的类。内部类可以是另一个类的成员,也可以定义在另一个类的函数或作用域块中。

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

🍍特性

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

如:在这里插入图片描述

B天生就是A的友元,但A不是B的友元。

🍑类与对象的理解

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

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

类与对象就在此结束了,接下来就算正式踏入C++大门了,祝各位好运!!!

请添加图片描述
请添加图片描述

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

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

相关文章

Linux(CentOS)安装Redis教程_简单快捷

一、安装依赖 因为redis是用C语言开发的,所以在安装之前需要确定是否安装gcc环境(gcc -v),如果没有安转可以执行一下命令进行安装 [rootlocalhost ~]# yum install -y gcc 二、下载安装包 1.在官网先进行下载 官网地址&#x…

苹果手机系统文件浏览技巧:实现高效的文件查找与管理

​ 目录 引言 用户登录工具和连接设备 查看设备信息,电池信息 查看硬盘信息 硬件信息 查看 基带信息 销售信息 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 注意事项 引言 苹果手机与安卓手机不同,无法直接访问系统文件…

GT收发器第六篇_GT channel内部时钟关系

文章目录 一、TX端时钟二、RX端时钟 一、TX端时钟 TX端可分为4个区域,分别为FPGA TX接口、PCS靠FPGA侧、PCS靠PMA侧、PMA,如下图。GTX/GTH发射器包括TXBUFFER和TX相位校准电路,以解决时钟域之间的相位差。TX相位校准电路用于TXBUFFER被旁路时…

NLP重要知识点:预训练模型【核心且详细】

本资料是NLP核心知识点的ppt!!!【文章较长,建议收藏】 本节课我们学习预训练模型。 前言 我们在学习词向量的时候,应该知道了多个产生词向量的方法,包括基于矩阵(词-词共现矩阵)分解的方法、基于语言模型(word2vec)的方法、以及结合二者优点的Glove模型等其他产生词…

每天五分钟计算机视觉:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

上门家政服务系统开发家政平台软件APP小程序家政系统源码

项目背景 随着科技的快速发展和人们生活水平的提高,家政行业正迎来前所未有的发展机遇。传统的家政服务模式已无法满足现代家庭对于高效、便捷、专业的服务需求,而上门服务家政系统的出现,正以其独特的技术优势,引领家政行业迈向…

landsat8数据产品说明

1、下载数据用户手册 手册下载网址,搜索landsat science关键词,并点击到官网下载。 2、用户手册目录 3、landsat8数据产品说明 具体说明在手册的第四章,4.1.4数据产品章节,具体描述如下: 英文意思: L8 的…

SSM学习——Spring AOP与AspectJ

Spring AOP与AspectJ 概念 AOP的全称为Aspect-Oriented Programming,即面向切面编程。 想象你是汉堡店的厨师,每一份汉堡都有好几层,这每一层都可以视作一个切面。现在有一位顾客想要品尝到不同风味肉馅的汉堡,如果按照传统的方…

RFID:锂电池自动化产线的智能监护者

RFID:锂电池自动化产线的智能监护者 一个拥有尖端工业科技的黑灯工厂里,自动化技术已经代替大部分的人工,在每天的自动化生产中会有大量的产品问世。但是人员少,自动化多的工厂怎么做生产管理,产品溯源呢?…

一定要学会的考研数学刷题方法,效果真的炸裂‼️

以1800题为例 1800是知识覆盖的最全面的,但要是刷的方法不对,它就是一个大坑。第一章我记得刷了整整一周。动不动就卡住,而且题目质量真的有点堪忧,答案跳步跳的真的怀疑人生,有时候看个答案都能看半天。而且1800的题…

正大国际:什么是qi货合约?

期货合约是一种标准化的、在期货交易所进行交易的合约。它规定了在未来某个特定时间点以约定价格买入或卖出某种特定商品或金融工具的义务。期货合约的买卖双方都需要遵守交易所的规定和交易规则 期货合约的主要特点包括: 标准化:期货合约规定了商品的品…

企业客户信息反馈平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…