类与对象(下)

 

🎉个人名片:

🐼作者简介:一名乐于分享在学习道路上收获的大二在校生
🐻‍❄个人主页🎉:GOTXX
🐼个人WeChat:ILXOXVJE
🐼本文由GOTXX原创,首发CSDN🎉🎉🎉

🕊系列专栏:零基础学习C语言----- 数据结构的学习之路
🐓每日一句:如果没有特别幸运,那就请特别努力!🎉🎉🎉
————————————————

🎉文章简介:

🎉本篇文章对   c++类和对象(下)   学习的相关知识进行分享!🎉

类和对象   分为三篇, (上,中,下),🎉 这是 类和对象(下)篇

如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作动力的源泉,让我们一起加油,一起奔跑,让我们顶峰相见!!!🎉🎉🎉

 


目录

一.构造函数的补充

函数体内初始化

初始化列表

不能只要初始化列表(函数体内初始化的意义)?

 初始化列表解决的问题:

关键字explicit

内置类型转化自定义类型

二.static成员

2.1概念

2.2特性

三.友元

3.1友元函数

3.2友元类

四.内部类

匿名对象


一.构造函数的补充

函数体内初始化

 虽然构造函数调用后,对象已经有了一个初始值,但是不能将其称为对对象成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化,因为初始化只能初始化一次,而构造函数可以多次赋值;只能在初始化列表中初始化;

 

 

初始化列表

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

 

函数体内初始化的弊端:

在函数体内不能初始化引用变量和const修饰的变量

因为:引用变量和const修饰的变量都只能在定义的时候初始化; 

举个栗子:

而在初始化列表就可以

函数体内初始化与初始化列表也可以混着使用:

注意:

1.每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次);

2.类中包含引用成员变量,const成员变量没有默认构造函数的自定义类型成员时,这些只能放在初始化列表中;

3.成员变量在类中声明次序就是其在初始化列表中的初始顺序,与其在初始化列表中的先后顺序无关;(选择题容易出现)

4.如果类里面成员也有类的时候,则在初始化的时候,是调用它自己的默认构造函数,如果没有默认构造函数,则会编译报错;

声明时给的缺省值的作用:

如果声明时给了缺省值,在初始化的时候(函数体内与初始化列表),没有显示的给值初始化,就会用给的缺省值;

举个栗子:

 

不能只要初始化列表(函数体内初始化的意义)?

如果只要初始化列表,则检查的工作有些无法完成,如当在初始化一个需要动态开辟空间的成员时,则开辟失败无法perror提示和终止程序;

举个栗子:

 初始化列表解决的问题:

1.引用  ,const   ,没有默认构造函数的自定义类型成员   的初始化问题

2.有些自定义类型成员想要自己来控制初始化值,不想用默认的构造函数来初始化;

3.尽量使用初始化列表,初始化列表是定义的地方,不写也会走初始化列表,先走初始化列表,再走函数体;

拷贝构造和赋值拷贝的区别:

关键字explicit

explicit作用:在自定义类型的构造函数前面加,则内置类型不能隐式类型转换为该自定义类型;

但是如果显示的强制类型转换explicit不起作用;

内置类型转化自定义类型

内置类型转换成自定义类型,是自定义类型的单参数(支持传一个参数或者多参数带缺省)的构造函数支持的;

举个栗子:

 

注意:自定类型的构造函数必须是是单参数(支持传一个参数或者多参数带缺省)的构造函数;

如果不想让内置类型转换为该自定义类型,就在该自定义类型的构造函数前面加explicit;

 

c++11支持多参数的转换

举个栗子:

二.static成员

2.1概念

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外面进进行初始化; 

面试题:

实现一个类,计算程序中创建出了多少个类对象?

2.2特性

1.静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区

2.静态成员变量必须在类外面定义定义时不添加static关键字,类中只是声明

3.类静态成员可用 类名::静态成员  或者 对象.静态成员  来访问;

4.静态成员函数没有隐藏的this指针,不能访问任何非静态成员

5.静态成员也是类的成员,受public,protected,private访问限定符的限制;

问题:

1.非静态成员函数可以调用非静态成员函数吗?

不可以,静态成员函数没有this指针

2.非静态成员函数可以调用类的静态成员函数吗?

可以

三.友元

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

3.1友元函数

举个栗子:

 

注意:

1.当一个函数想要访问一个类的成员时,可以将这个函数设置为该类的友元函数

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

3.友元函数可访问类里面的私有和保护成员,但不是类的成员函数,没有this指针

4.友元函数不能用const修饰

5.友元函数可以在类定义的任何地方声明,不受类访问限定符的限制;

6.一个函数可以是多个类的友元函数

友元函数的调用与普通函数的调用相同;

3.2友元类

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

友元关系是单向的(比如A是B的友元,A可以访问B的成员,但是B不能访问A的成员),不具有交换性;

友元关系不能传递;

友元关系不能继承;

举个栗子:

 

四.内部类

 

简单地说:就是一个类里面又定义了一个类,里面的这个类就是内部类;

内部类是一个独立的类,它不属于尾部外部类,更不能通过外部类的对象去访问内部类的成员,外部类对内部类没有任何权限;

注意:

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

特性:

1.内部类可以定义在外部类中的public,private,protected都是可以的;

2.注意内部类可以直接访问外部类中的static成员,不需要外部的对象/类名;

3.sizeof(外部类)=外部类的大小,和内部类没有关系,不计算内部类的大小;

4.内部类受外部类访问限定符的限制和外部类的类域的限制;

匿名对象

顾名思义:没有名字的对象



 

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

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

相关文章

设计模式精讲:掌握单例模式的实现与优化

掌握单例模式的实现与优化 一、引言:如何学习设计模式?二、前置知识:对象的创建的销毁2.1、拷贝构造2.2、拷贝赋值构造2.3、移动构造2.4、移动赋值构造 三、单例模式的定义四、单例模式的实现与优化4.1、版本一4.2、版本二4.3、版本三4.4、版…

ros2智能小车中STM32地盘需要用到PWM的模块

我做的地盘比较简单,使用了一下模块: 4个直流减速电机,(每个模块用到了一个PWM)---这会通过L298N的ENA,ENB来实现控制 光电对射测速模块(不用PWM) 超声波测距模块(不用PWM,只需要…

靡靡之音 天籁之声 ——Adobe Audition

上一期讲到了和Pr配合使用的字幕插件Arctime Pro的相关介绍。相信还记得的小伙伴应该记得我还提到过一个软件叫做Au。 当人们对字幕需求的逐渐满足,我们便开始追求更高层次的享受,当视觉享受在进步,听觉享受想必也不能被落下! Au即…

NX二次开发UF_CURVE_ask_offset_parms 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_offset_parms Defined in: uf_curve.h int UF_CURVE_ask_offset_parms(tag_t offset_curve_object, UF_CURVE_offset_data_p_t offset_data_pointer ) overview 概述 …

什么是好的FPGA编码风格?(3)--尽量不要使用锁存器Latch

前言 在FPGA设计中,几乎没人会主动使用锁存器Latch,但有时候不知不觉中你的设计莫名其妙地就生成了一堆Latch,而这些Latch可能会给你带来巨大的麻烦。 什么是锁存器Latch? Latch,锁存器,一种可以存储电路…

Spring Boot 项目配置文件出现乱码的解决方法

如下图,我们 Spring Boot 项目的配置文件 application.properties 可能会出现如下的乱码问题: 我们写注解的时候是正常的,但是下次启动项目就出现了乱码,这个是字符集设置的问题 解决方法 1.点击 File 选择 Settings 2.搜索 enco…

Grabcut算法在图片分割中的应用

GrabCut算法原理 Grabcut是基于图割(graph cut)实现的图像分割算法,它需要用户输入一个bounding box作为分割目标位置,实现对目标与背景的分离/分割,与KMeans与MeanShift等图像分割方法不同。 Grabcut分割速度快,效果好&#xff0…

stm32 42步进电机 上位机示例

脉冲到底是个啥东西?步进电机一直说发脉冲 步进电机通过接收脉冲信号来实现精确的位置控制。脉冲是一种短暂的电信号,它的变化可以触发步进电机转动一定的角度或步进。步进电机控制系统会根据输入的脉冲信号来精确定位和控制步进电机的转动,每…

YOLOv8 训练自己的分割数据集

之前写过一篇 使用YOLOv8训练自己的【目标检测】数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】,里面带大家整个流程走过一遍了, 这篇文章我们来介绍如何使用 YOLOv8 训练分割数据集&a…

Linux篇:文件系统

一、共识原理: 文件文件内容文件属性 磁盘上存储文件存文件的内容(数据块)存文件的属性(inode) Linux的文件在磁盘中存储是将属性和内容分开存储的。 二、硬件简述: 1. 认识硬件 磁盘:唯一的一…

LabVIEW绘制带有多个不同标尺的波形图

LabVIEW绘制带有多个不同标尺的波形图 通过在同一波形图上使用多个轴,可以使用不同的标尺绘制数据。请按照以下步骤操作。 将波形图或图表控件放在前面板上。 1. 右键点击您要创建多个标尺的轴,然后选择复制标尺。例如,如果要为一个…

文件搜索工具HoudahSpot mac中文版特点

HoudahSpot mac是一款文件搜索工具,它可以帮助用户快速准确地找到文件和文件夹,支持高级搜索和过滤,同时提供了多种视图和操作选项,方便用户进行文件管理和整理。 HoudahSpot mac软件特点 高级搜索和过滤功能:软件支持…

手把手教会你--github的学习--持续更新

有什么问题,请尽情问博主,QQ群796141573 前言1.1 使用过程(1) 进入某个项目(2) 点击某个文件(3) 在源码区域下面(4) 源码区的头顶上 1.2 作者的其他项目1.3 搜索1.4 复制别人的代码(即项目)到自己的空间内1.5 上传自己的Bugs(bushi1.6 在线修改文件1.7 评…

【非监督学习 | 聚类】聚类算法类别大全 距离度量单位大全

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

JPA 自关联 设置单向多对一

Spring boot 3 JPA中,遇到一个需求,建一个数据字典表: Dictionary,存放两级数据,第一级为字典项目,第二级为项目内容,查询时要把parent_id对应父项的名称也一起查出来,返回前端。 …

Project DESFT 白皮书中文版——应用于普惠金融的可信数字凭证解决方案

1. 概述 Project DESFT 是由 Solv 基金会与 zCloak Network 联合设计孵化,以跨境贸易和金融服务为场景的分布式可信数字凭证解决方案(Distributed Trusted Digital Credential Solution),项目获得新加坡金管局(Monetar…

C++学习之路(四)C++ 实现简单的待办事项列表命令行应用 - 示例代码拆分讲解

本期示例介绍: 本期示例《待办事项列表应用》展示了一个简单的任务管理系统,用户可以通过命令行界面执行添加任务、删除任务和显示任务列表等操作。 功能描述: 添加任务功能: 用户可以输入任务描述,将新的任务添加到任务列表中。…

声音响度、声压级计权(A B C)实现

声压 sound pressure 声压就是大气压受到声波扰动后产生的变化,即为大气压强的余压,它相当于在大气压强上的叠加一个声波扰动引起的压强变化。由于声压的测量比较容易实现,通过声压的测量也可以间接求得质点速度等其它物理量,所以…

【开源】基于JAVA的天然气工程业务管理系统

项目编号: S 021 ,文末获取源码。 \color{red}{项目编号:S021,文末获取源码。} 项目编号:S021,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四…

手把手教会你--渗透实战--Hack The Box-Starting Point-Meow--持续更新

有什么问题,请尽情问博主,QQ群796141573 前言 前言 请务必跟着博主复现一遍 参考: Hack The Box-Starting Point-Meow