当前位置: 首页 > news >正文

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

  • 一.运算符重载补充:
    • 1.流插入运算符:
      • 1.==考虑到隐含的参数指针:==
      • 2.进行优化!
        • 2-1:解决办法:友元
        • 2-2:流插入一定满足连续?
      • 3.总结:
    • 2.流提取运算符:
  • 二.const 成员:
      • 1.概念进入:
      • 2.具体操作:
      • 3.参数变化:
        • 3-1:权限下降!
      • 4.成员函数const 原则:
  • 三.构造函数补充:
    • 1.初始化:
    • 2.初始化列表:
    • 3.作用:
      • 1.const的初始化:
      • 2.引用的初始化:
      • 3.自定义类型成员的初始化:
        • 3-1.自定义类型初始化列表:
        • 3-2.所有都可以使用初始化列表?
      • 4.初始化列表的顺序!
    • 4.总结:
      • 1.引用,const,没有默认构造的自定义类型成员!
      • 2.自定义类型的成员有显示的构造函数!
      • 3.尽量使用初始化列表因为不使用也会走到初始化列表中!
        • 3-1:

一.运算符重载补充:

请添加图片描述

1.流插入运算符:

我们知道进行运算符重载这个函数的参数的左右类型是非常重要的,我们尝试在类中去定义这个流插入重载!

1.考虑到隐含的参数指针:

请添加图片描述

2.进行优化!

我们观察上面的代码发现可以实现在类中进行流插入运算符的一个重载但是我们需要考虑隐含参数的位置所以我们进行传参的时候就 写成了 == d1<<cout ==.

上面这个语句是非常奇怪的因为我们之前使用cout的时候把类型的数据插入到cout中但是上面这个就是把cout插入到d1中这是不好的!

请添加图片描述

没有人规定类的操作符必须要写在类中!
我们把函数定义到全局中-》出现了一个问题我们在全局中是找不到成员变量的!我们成员变量是私有的我们不希望成员变量不去使用成员函数而发生改变!

2-1:解决办法:友元

通过friend 关键字去在类中声明一个友元函数就可以解决,我是你的朋友可以访问私有的成员变量!

在这里插入图片描述

2-2:流插入一定满足连续?

我们通过前面的知识我们知道满足连续性这个函数就需要一个返回值!

在这里插入图片描述

3.总结:

其他的运算符一般是实现在成员函数中,但是流插入和流提取操作符是实现在全局的。

1.因为存在隐含的参数(影响了操作符的顺序)。
1-1:写在全局改变了函数传参的顺序并且满足了正常的cout的使用顺序!

2.写到全局访问不到私有的问题?
2-1:友元解决!

2.流提取运算符:

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

二.const 成员:

1.概念进入:

请添加图片描述

我们观察上面的代码会发现?
我们定义了一个const Date 类型的d2是不想要d2这个日期对象被修改但是我们的隐含参数默认是一个Date* 类型,所以参数列表不匹配!

通过将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

2.具体操作:

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

需要特别注意成员函数定义和声明分开的时候const都需要加上和缺省参数不一样!

3.参数变化:

请添加图片描述

3-1:权限下降!

请添加图片描述

4.成员函数const 原则:

1.可以定义成const 的成员函数都应该定义,这样const 和非const 对象都可以调用。
2.如果不去定义const 那么const类型的对象就不可以去进行成员函数调用!
3.如果有需要修改成员变量的函数不可以使用const去修饰!

三.构造函数补充:

1.初始化:

我们之前通过构造函数去初始化成员变量其实是一种赋值!

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

2.初始化列表:

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

在这里插入图片描述

3.作用:

1.const的初始化:

请添加图片描述

2.引用的初始化:

我们知道引用是必须需要初始化,第一次是地址,之后都是赋值!所以我们不可以让引用类型的成员变量在赋值的时候再去拿到别的值! 不然会产生赋值之后的这个成员变量到底是谁的别名! 通过在初始化列表进行初始化我们再去赋值我们就知道这个引用是谁的别名。

请添加图片描述

3.自定义类型成员的初始化:

请添加图片描述

我们通过初始化列表就可以自己搞定初始化一个队列!

3-1.自定义类型初始化列表:

通过初始化列表自己去调用对应的构造函数去完成我们想要多大的栈就可以初始化多大的栈!

请添加图片描述

3-2.所有都可以使用初始化列表?

我们不能完全舍弃构造函数初始化!因为对于构造函数来说处理栈空间开辟是否成功等比较长的代码上是比较有优势的。初始化列表没有办法去判断栈空间是否开辟成功!

请添加图片描述

4.初始化列表的顺序!

初始化列表要和类的成员变量定义顺序相同!
在这里插入图片描述

4.总结:

1.引用,const,没有默认构造的自定义类型成员!

在这里插入图片描述

2.自定义类型的成员有显示的构造函数!

请添加图片描述

3.尽量使用初始化列表因为不使用也会走到初始化列表中!

3-1:

80%----100% 使用初始化列表:
0%-20% 进行初始化列表+构造函数的混和使用!

相关文章:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

类和对象中&#xff08;运算符重载补充&#xff09; 类和对象下&#xff08;初始化列表&#xff09; 一.运算符重载补充&#xff1a;1.流插入运算符&#xff1a;1.考虑到隐含的参数指针&#xff1a;2.进行优化&#xff01;2-1&#xff1a;解决办法&#xff1a;友元2-2&#xff…...

D. Doremy‘s Connecting Plan Codeforces Round 906 (Div. 2)

Problem - D - Codeforces 题目大意&#xff1a;有一个长度为n的数组a&#xff0c;同时有一个n个点的图&#xff0c;编号与数组的编号对应&#xff0c;初始没有边&#xff0c;如果当前连通块的中a[i]的和某一个点a[j]>连通块的一个点i*某一个点j*c&#xff0c;那么就可以连…...

Prometheus+Grafana

一、Prometheus 获取配置文件 docker run -d -p 9090:9090 --name prometheus prom/prometheusmkdir -p /app/prometheusdocker cp prometheus:/etc/prometheus/prometheus.yml /app/prometheus/prometheus.yml停止并删除旧的容器&#xff0c;重新启动 docker run -d --name…...

CoCa论文笔记

摘要 计算机视觉任务中&#xff0c;探索大规模预训练基础模型具有重要意义&#xff0c;因为这些模型可以可以极快地迁移到下游任务中。本文提出的CoCa&#xff08;Contrastive Captioner&#xff09;&#xff0c;一个极简设计&#xff0c;结合对比损失和captioning损失预训练一…...

uniapp 微信小程ios端键盘弹起后导致页面无法滚动

项目业务逻辑和出现的问题整理 新增页面 用户可以主动添加输入文本框 添加多了就会导致当前页面出现滚动条,这就导致ios端滚动页面的时候去点击输入框键盘抬起再关闭的时候去滚动页面发现页面滚动不了(偶尔出现),经过多次测试发现是键盘抬起的时候 主动向上滑动 100%出现这种问…...

三维模型优势在哪里?如何提升产品自身商业价值?

不少企业、商家都开始使用VR全景展示来宣传推广自己的产品、活动等&#xff0c;虽说VR全景的沉浸式体验&#xff0c;相比于图片、视频而言有着无法取代的优势&#xff0c;但是也不能忘了VR全景另一个大优势&#xff0c;那就是丰富多样的互动性。3D模型展示让产品展示和体验不再…...

WheatA 轻量级生态数据软件

无论是在工作还是上学期间&#xff0c;大家想要做一个科研项目或者市场调查时&#xff0c;往往需要大量的数据用于分析总结&#xff0c;这时获得优质的数据就显得额外重要&#xff0c;数据的优劣往往决定了项目结果的好坏。数据来源的主要渠道主要有两种&#xff1a;无非是去数…...

2127. 参加会议的最多员工数 : 啥是内向/外向基环树(拓扑排序)

题目描述 这是 LeetCode 上的 「2127. 参加会议的最多员工数」 &#xff0c;难度为 「困难」。 Tag : 「拓扑排序」、「内向基环树」、「图」 一个公司准备组织一场会议&#xff0c;邀请名单上有 n 位员工。 公司准备了一张圆形的桌子&#xff0c;可以坐下任意数目的员工。 员工…...

Qt入门日记1

目录 1.Qt简介和案例 2.第一个Qt程序 3.学会查看帮助文档 4.创建一个按钮 5.对象树简介 6.Qt的坐标系 7. 信号和槽 7.1自定义信号和槽 7.2信号连接信号 7.3拓展 7.4Qt4版本以前的connect 1.Qt简介和案例 Qt是一个跨平台的C图形用户界面应用程序框架(就是一个库吧…...

SpringBoot_第七章(读写分离)

这里列举了三种读写分离实现方案,分别是如下三种 1&#xff1a;MybatisPlus&#xff08;读写分离&#xff09; 1.1&#xff1a;首先创建三个数据库1主2从 表名是user表 1.2&#xff1a;代码实例 1&#xff1a;导入pom <!--MybatisPlus的jar 3.0基于jdk8--><depend…...

linux下mysql-8.2.0集群部署(python版本要在2.7以上)

目录 一、三台主机准备工作 1、mysql官方下载地址&#xff1a;https://dev.mysql.com/downloads/ 2、修改/etc/hosts 3、关闭防火墙 二、三台主机安装mysql-8.2.0 1、解压 2、下载相应配置 3、初始化mysql&#xff0c;启动myslq&#xff0c;设置开机自启 4、查看初始密…...

40 深度学习(四):卷积神经网络|深度可分离卷积|colab和kaggle的基础使用

文章目录 卷积神经网络为什么要卷积卷积的具体流程池化tensorflow代码 深度可分离卷积原理介绍计算量对比代码参数计算例子 colab 和 kagglecolabkaggle如何在colab上使用kaggle的数据 卷积神经网络 卷积神经网络的基本结构 1&#xff1a; (卷积层(可选)池化层) * N全连接层 *…...

Spring Boot面向切面加注解

一.项目pom.xml文件引入切面依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>二.定义注解类 import java.lang.annotation.*;/*** desc 错误日志注解* au…...

uniapp小程序授权统一处理

1.使用 1.将工具代码引入到utils中 const authorize (scope, isOne false, isMust false) > {if (!scope || !authorizeObj[scope]) {return console.error(请传输需要获取权限的 scope&#xff0c;详见,https://uniapp.dcloud.net.cn/api/other/authorize.html#scope-…...

光学仿真|优化汽车内部照明体验

当我们谈论优化人类感知的内部照明时&#xff0c;我们实际上指的是两个重点领域&#xff1a;安全性和驾驶员体验。如果内部照明可以提供尽可能最佳的体验&#xff0c;驾驶员则能够更好地应对颇具挑战性或意外的驾驶状况&#xff0c;并且减轻疲劳感。除了功能优势外&#xff0c;…...

Spring XML使用CASE WHEN处理SELECT字段

在日常开发中&#xff0c;经常会碰到需要导出的情况。而一些枚举值或者状态一般是定义成整型&#xff0c;这个时候需要对数据进行转换&#xff0c;转换成对应的文本再导出。 在XML中用CASE WHEN来根据不同的查询结果做不同的处理。 比如 SELECT name AS 姓名, age AS 年龄 C…...

关于C#中使用多线程的讨论

关于C#中使用多线程的讨论 C# 中 Thread 调用的函数有返回值 没有输入应该如何解决 如果你想在一个新的线程中调用一个带返回值但没有输入参数的函数,可以使用 Thread 类的委托 ThreadStart 来创建一个新的线程,并在其中调用该函数。然后,你可以使用 Thread 类的 Join 方法…...

工程机械数字孪生可视化平台建设,推动大型装备智能化数字化转型升级

随着信息技术的迅猛发展&#xff0c;数字孪生技术作为一项新兴技术应运而生。数字孪生是指通过数学模型和仿真技术&#xff0c;将实际物理对象与其数字化虚拟模型相互关联&#xff0c;实现对物理对象的全生命周期管理和智能优化。在工程机械领域&#xff0c;巨蟹数科从数字孪生…...

Linux 网络流量监控利器 iftop命令详解及实战

简介 iftop 是什么 在 Linux 系统下即时监控服务器的网络带宽使用情况&#xff0c;有很多工具&#xff0c;比如 iptraf、nethogs 等等&#xff0c;但是推荐使用小巧但功能很强大的 iftop 工具。 iftop 是 Linux 系统一个免费的网卡实时流量监控工具&#xff0c;类似于 top 命令…...

protected by SourceGuardian and requires a SourceGuardian loader ‘ixed.8解决方案

php相关问题 安装程序提示以下内容 遇到某些php程序的安装提示&#xff1a; PHP script ‘/www/wwwroot/zhengban.youyacao.com/install/index.php’ is protected by SourceGuardian and requires a SourceGuardian loader ‘ixed.8.1.lin’ to be installed. 1) Click her…...

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(14)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(13) 上一回讲完了drivers/gpu/drm/drm_framebuffer.c中的framebuffer_check函数中的第一个for循环,本回继续讲解framebuffer_check()接下来的代码。为了便于理解,再次贴出其源码,如下所示: static …...

2023-macOS下安装anaconda,终端自动会出现(base)字样,如何取消

2023-macOS下安装anaconda&#xff0c;终端自动会出现(base)字样&#xff0c;如何取消 安装后&#xff0c;我们再打开终端&#xff0c;就会自动出现了&#xff08;base&#xff09; 就会出现这样子的&#xff0c;让人头大&#xff0c; 所以我们要解决它 具体原因是 安装了anac…...

Nginx搭载负载均衡及前端项目部署

目录 ​编辑 一.Nginx安装 1.安装所需依赖 2.下载并解压Nginx安装包 3.安装nginx 4.启动Nginx服务 二.Tomcat负载均衡 1.准备环境 1.1 准备两个Tomcat 1.2 修改端口号 1.3 配置Nginx服务器集群 2.效果展示 ​编辑三.前端项目打包 ​编辑四.前端项目部署 1.上传项目…...

深度学习——炼丹

学习率调整策略 自定义学习率调整策略 简单版 net MyNet()optimoptim.Adam(net.parameters(),lr0.05) for param_group in optim.param_groups: param_group["lr"] param_group["lr"]*0.5print(param_group["lr"]) #0.25复杂版&#…...

Matlab中的app设计

1.窗口焦点问题&#xff1a; 窗口焦点问题&#xff1a;确保你的应用程序窗口正常处于焦点状态。有时&#xff0c;其他窗口的弹出或焦点切换可能导致应用程序最小化。点击应用程序窗口以确保它处于焦点状态。 窗口管理&#xff1a;确保你的 MATLAB 或操作系统没有未处理的错误或…...

曾经遇到过的无法解释的问题

因为不能直接展示生产数据与生产数据结构&#xff0c;所以写一个简单的例子 class Stu{ private String name; private int age; getter setter constructor 略 } List<Stu> list new ArrayList(); list.add(new Stu("s1",16)); list.add(new Stu("…...

基于uniapp与uview做一个按拼音首字母排序的通讯录页面

效果图&#xff1a; 第一步导入pinyin库并应用&#xff0c;用于区分汉字的拼音首字母 npm i pinyin import pinyin from "pinyin" 完整算法&#xff1a; function getListByPinyinFirstLetter(data) {const newList {};for (const item of data) {let firstLett…...

网络工程师-入门基础课:华为HCIA认证课程介绍

【微/信/公/众/号&#xff1a;厦门微思网络】 华为HCIA试听课程&#xff1a;超级实用&#xff0c;华为VRP系统文件详解 华为HCIA试听课程&#xff1a;不会传输层协议&#xff0c;HCIA都考不过 华为HCIA试听课程&#xff1a;网络工程师的基本功&#xff1a;网络地址转换NAT 一…...

玻色量子成功研制光量子计算专用光纤恒温控制设备——“量晷”

​近日&#xff0c;北京玻色量子科技有限公司&#xff08;以下简称“玻色量子”&#xff09;成功研制出一款高精度量子计算专用光纤恒温控制设备——“量晷”&#xff0c;该设备能将光纤的温度变化稳定在千分之一摄氏度量级&#xff0c;即能够做到0.001C的温度稳定维持&#xf…...

力扣:147. 对链表进行插入排序(Python3)

题目&#xff1a; 给定单个链表的头 head &#xff0c;使用 插入排序 对链表进行排序&#xff0c;并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的&#xff0c;每次只移动一个元素&#xff0c;直到所有元素可以形成一个有序的输出列表。每次迭代中&#xff0c…...