C++——类和对象(6)

news2024/11/17 15:32:20

作者:几冬雪来

时间:2023年5月10日

内容:C++类和对象内容讲解

目录

前言: 

1.取地址操作符重载:

2.构造函数(进阶):

1.初始化列表: 

2.static成员: 

结尾:


前言: 

今天我们依旧来继续讲解我们的类和对象,很快的我们的类和对象这一个板块的知识也都要学习完毕了。类和对象作为我们C++中一个重要的学习板块,我们需要多去了解它。 

1.取地址操作符重载:

延续我们上一篇博客的内容,在上一篇博客中我们讲解了许多操作符的重载的方式。

在这里就剩下我们最后一个要知道的操作符重载,也就是取地址操作符重载。 

但是这个操作符在实际应用中基本不去进行应用,所以在这里我们将其代码大致的写出来看看即可。 

这里就是我们的取地址操作符的代码的书写方式。 

2.构造函数(进阶):

在前不久我们学习了构造函数,并且也可以书写构造函数,而今天我们就要来对构造函数进行延伸的讲解。 

1.初始化列表: 

在以前我们写构造函数的时候,一般都是对构造的函数体进行赋值

类似于上面的这种方式。

但是今天我们要讲解另一种方式——初始化列表。 

在这里我们的初始化列表是:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个“成员变量”后面跟一个放在括号内的的初始值或表达式

就是我们这里的这种书写方法。 

同时在这里我们的初始化列表也有它的规定所在。 

那么我们的初始化列表有哪些规定呢? 

首先是我们的第一点,每个成员变量在初始化列表中最多出现一次,也就是只能初始化一次

这一个点非常的容易理解,毕竟在初始化的时候我们不能将一个变量既初始化为10又初始化为20,这是不合理的。 

接下来就是我们的第二点。

首先我们的引用成员变量和const成员变量必须在初始化列表位置进行初始化

然后就是我们的自定义类型。 

在这里我们的自定义会去调用到它的默认构造

因为aobj是我们的自定义类型,在编译器中它会自动处理会去调用它的默认构造,在初始化列表中调用,但是它可以不出现

因此即使我们在_ref和_n定义处没有写我们的自定义类型,它还是会进行调用的操作。 

但是并不是内置类型就完全不进行处理。

类似我们这里的x = 1的操作,它并不是赋值操作而且缺省值

而这里的缺省值是给初始化列表的,如果在定义处我们进行初始化的话,缺省值就没有作用了

 

同样的我们的自定义类型也是如此。 

但是如果我们的A没有默认构造,那么在定义处我们不写aobj是不会通过的,在这里我们要显示着给值。 

但是在这里我们的引用就会出现问题,记得我们在引用处曾经又说过,指针有野指针,引用没有野引用这一个概念

虽然可以跑起来,但是从语法上来看这个代码是不对的,这里就类似我们野指针一样的野引用

因此我们也可以得知引用并不是万能的。 

这里有人就要问了,既然我们的初始化列表这么有用的话是不是就不需要用函数体赋值了

其实不然,虽然初始化列表可以解决我们的大多数的问题,但是它并不是万能的,如果在这里我们类似开辟空间,要去检查空间是否成功开辟的话,初始化列表就没办法办到,这里就需要我们的函数体赋值。 

并且这里也还有一个坑的存在。

像我们上面的这个代码,假如我们给a1一个值的话,这里打印出来的a2是一个随机值

因为成员变量在类中的声明顺序就是其初始化列表的初始化顺序,与其在初始化列表的先后顺序无关

这里给一个建议,那就是声明的顺序和定义的顺序保持一致

同时这里我们还要知道这一个点。 

2.static成员: 

接下来我们就来讲解static成员。

这里我们先写一串代码来统计A创建了多少个对象。

在这里我们就计算创建的个数。

在这里我们通过打印可以简单的看出来结果

在这里我们的第一次只能调用aa0,在第二次打印的时候,因为实参传给了形参,自定义类型传参要调用拷贝构造,所以是4次。

在出作用域后,销毁所以最后是3次。 

在这里我们对代码稍加修改一下,修改成上面这个样子。

那么这个时候我们可以看见两次调用83行的结果都是3。

这是因为aa2在静态区,不在栈帧中,它只会被定义一次

但是我们这种写法就有劣势所在,因为我们的_scount是全局变量,因此它在任何地方都可以被改变,就像我们在Func对,_scount进行++操作是可以的

所以在这里为了解决这个方法,我们对其进行了封装的操作。 

  

这里我们的静态成员变量也是这个样子进行声明的。

但是在这里我们的定义就有所不同,因为它不属于某个对象自己的成员,它属于全局是每个对象共享的

这样子定义是不行的。

因此我们要将它在类的外面进行定义

这里有人可能就要问了,在这里我们的_scount不是属于私有的吗,为什么能在类的我们进行定义操作

这里我们只能理解为它有一次突破私有进行定义的操作

但是实际上它还是私有的,我们不能直接对其进行访问。 

这里如果要对其进行访问的话,这里就要写一个我们的静态成员函数。

因此在这里我们可以知道,通常静态成员函数和静态成员变量是配套出现和使用的。 

但是在这里有一个需要我们注意的点,那就是静态成员函数不能访问非静态的成员。

因为它没有this指针

那有人就问能不能我们能不能在声明的时候给其一个缺省值来使用

这也是不行的,因为我们的缺省值是给初始化列表的,但是我们的静态的没有初始化列表

因此它会进行报错。 

  

因此静态成员变量不能给缺省值。 

结尾:

在这里,我们的这一期的类和对象也学习完毕了, 最近C++类和对象的难度可谓是提升了不止一点,如果只是简简单单的看的话效果是很低的,因此要学好这方面的知识还要多去刷题来提升自己。最后希望这篇博客能为各位的学习带来帮助。

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

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

相关文章

数据可视化工具 - ECharts饼形图的编写

1 饼形图 1年龄分布模块制作 1.1 官网找到类似实例&#xff0c; 适当分析&#xff0c;并且引入到HTML页面中 <!DOCTYPE html> <html> <head><meta charset"utf-8"/><title>ECharts</title><!-- 引入刚刚下载的 ECharts 文件…

Android WebRTC+SRS/ZLM视频通话(4):Android使用WebRTC推流SRS/ZLMediaKit

Android WebRTCSRS/ZLM视频通话&#xff08;4&#xff09;&#xff1a;Android使用WebRTC推流SRS/ZLMediaKit 来自奔三人员的焦虑日志 接着上一章内容&#xff0c;继续来记录Android是如何使用WebRTC往SRS或ZLMediaKit进行推流。想要在Android设备上实现高质量的实时流媒体推送…

VirtualBox+Vagrant

1.下载VirtualBox 1.下载 VirtualBox官网下载 下载过程无特别注意事项&#xff0c;注意调整到非 C 盘位置即可&#xff0c;其他部分皆为默认设置 2.修改虚拟电脑存储位置 1.将C:\Users\用户名下的VirtualBox VMs文件夹复制到自定义目标文件夹中 2.打开VirtualBox,在全局设置…

嵌入式TCP/IP协议栈-LwIP

文章目录 LWIP是什么基础知识OSI七层模型TCP/IP五层模型LwIP的模型常见协议ARP协议ICMP协议DHCP协议DNS协议 LwIP APISocket大端模式与小端模式地址字节序IP地址转换 网络并发 LWIP是什么 LWIP是一个轻量级的TCP/IP协议栈&#xff0c;其全称为Lightweight IP&#xff0c;它专门…

UNIX网络编程卷一 学习笔记 第十二章 IPv4与IPv6的互操作性

未来数年内&#xff0c;因特网也许会逐渐从IPv4过渡到IPv6&#xff0c;在过渡阶段&#xff0c;基于IPv4的现有应用能与基于IPv6的全新应用协同工作非常重要。例如&#xff0c;厂商不应只提供仅能与IPv6 telnet服务器程序协同工作的telnet客户程序&#xff0c;而应该提供既能与I…

环境搭建:Visual Studio的安装和创建C++项目

Visual Studio的安装和创建C项目 引言前言下载Visual Studio安装包安装Visual Studio创建项目小结 引言 &#x1f4a1; 作者简介&#xff1a;专注于C/C高性能程序设计和开发&#xff0c;理论与代码实践结合&#xff0c;让世界没有难学的技术。 &#x1f449; &#x1f396;️ C…

第五十章 Unity Input Manager 输入系统(上)

Unity的输入系统支持多种输入设备&#xff0c;比如键盘和鼠标&#xff0c;游戏手柄&#xff0c;触摸屏&#xff0c;VR和AR控制器等等。Unity 通过两个独立的系统提供输入支持&#xff1a;第一&#xff0c;输入管理器 (Input Manager) 是 Unity 核心平台的一部分&#xff0c;默认…

数据可视化一、ECharts

零、文章目录 数据可视化一、ECharts 1、数据可视化 &#xff08;1&#xff09;数据可视化 数据可视化主要目的&#xff1a;借助于图形化手段&#xff0c;清晰有效地传达与沟通信息。数据可视化可以把数据从冰冷的数字转换成图形&#xff0c;揭示蕴含在数据中的规律和道理。…

TGANet:用于改进息肉分割的文本引导注意力

文章目录 TGANet: Text-Guided Attention for Improved Polyp Segmentation摘要本文方法编码器模块Feature Enhancement ModuleLabel AttentiondecoderMulti-scale Feature Aggregation损失函数 实验结果 TGANet: Text-Guided Attention for Improved Polyp Segmentation 摘要…

2023年湖北建设厅特种工报名需要什么条件?报名流程是什么?

2023年湖北建设厅特种工报名需要什么条件&#xff1f;报名流程是什么&#xff1f; 建设厅特种工现在已经开始报名考试安排计划了&#xff0c;想要报考建设厅特种工的现在可以了解一下具体的流程以及相关信息哟。为自己报名考试做准备&#xff0c;下面启程别就来给您介绍一下建设…

从入门到精通:接口自动化测试中加密、解密和Sign签名的完整指南

【专业解读】接口自动化测试安全机制剖析&#xff1a;加密、解密和sign签名技术原理与应用&#xff01; 目录 摘要&#xff1a; 1. 加密 2. 解密 3. Sign签名 4. 示例 摘要&#xff1a; 在进行接口自动化测试时&#xff0c;加密、解密和sign签名是非常重要的步骤。这些过…

基于单片机的数字频率计设计

数字频率计概述 数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号&#xff0c;方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试…

基于AT89C52单片机的温度检测设计与仿真

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87770153 源码获取 主要内容: 本设计是基于52系列的单片机进行的设计,可以完成温度的测控,可以实现实际温度与设定温度区域的比较,并在LED上相应的显示结果。设计过程在硬…

算法 DAY57 动态规划13 647. 回文子串 516.最长回文子序列

647. 回文子串 暴力解法&#xff1a;两层for循环&#xff0c;再加一个判断是否是回文子串&#xff0c;时间复杂度O(n3) 五部曲 1、 判断一个子字符串&#xff08;字符串的下表范围[i,j]&#xff09;是否回文&#xff0c;依赖于&#xff0c;子字符串&#xff08;下表范围[i 1,…

CLion安装(详细步骤+截图)

目录 一、CLion-2021.1.3.exe 下载 二、运行环境mingw-w64压缩包下载 三、 安装插件 ---- ide-eval-resetter-2.1.13压缩包下载 一、CLion-2021.1.3.exe 下载 Other Versions - CLion (jetbrains.com) 1、下载 2、更改路径 &#xff08;不要放在含有中文的路径下&a…

【Java面试】Java基础-集合相关知识点(1)

文章目录 1. 集合有哪些类&#xff1f;2. ArrayList3. Map主要有哪些类&#xff1f; 容器主要包括 Collection 和 Map 两种&#xff0c;Collection 存储着对象的集合&#xff0c;而 Map 存储着键值对(两个对象)的映射表。 1. 集合有哪些类&#xff1f; 集合是一组相关对象的容…

ThreadLocal底层源码解析

线程隔离&#xff0c;保证多线性访问安全 每个线程拿到的值私有&#xff0c;相互不干扰 ThreadLocal是JDK包提供的&#xff0c;它提供线程本地变量&#xff0c;如果创建一乐ThreadLocal变量&#xff0c;那么访问这个变量的每个线程都会有这个变量的一个副本&#xff0c;在实际…

跳槽? 我只想多赚点罢了

前言 五一过后也就也就意味着今年的金三银四跳槽季正式结束了&#xff0c;不知道大家是否拿到了offer&#xff0c;面对金三银四的招聘旺季&#xff0c;如果没有精心准备那笔者认为那是对自己不负责任&#xff1b;就我们测试员来说&#xff0c;多数的公司总体上面试都是以自我介…

表的存储原理(数据库)

目录 一、内部存储概述 二、 数据行&#xff08;记录&#xff09;结构 1、定长记录 2、变长记录 一、内部存储概述 表是有关某个特定实例的数据集合&#xff0c;在关系数据库中处于核心地位。 创建一个表&#xff0c;就会有一行或多行插入到用来管理这个表的多个系统表里。…

如何压缩照片大小不大于200k

如何压缩照片大小不大于200k&#xff1f;有时候需要压缩照片大小不大于200k是因为在一些场景下&#xff0c;上传或传输大文件会受到限制&#xff0c;例如通过电子邮件发送、上传到云存储空间等等。在这种情况下&#xff0c;压缩照片可以让图片更容易地传输和分享&#xff0c;并…