[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% 进行初始化列表+构造函数的混和使用!

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

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

相关文章

Websocket传递JWT令牌

在访问带有[Authorize]的方法的时候&#xff0c;需要前端通过自定义报文头的形式将JWT令牌传递给后端进行验证&#xff0c;否则是不能访问带有[Authorize]的方法。 [Authorize]是用于限制对web应用程序中某些操作或控制器的访问。当[授权]属性应用于操作或控制器时&#xff0c;…

妙手ERP本期功能更新:TikTok支持自定义SKU规格、Temu支持创建尺码表、仓库库存可同步至Shopee全球产品 ......

为了给卖家朋友带来更好的使用体验&#xff0c;更高效地运营跨境店铺&#xff0c;妙手ERP在上周优化了以下多项功能。 01、产品模块优化 全平台 - 插件采集支持批量采集速卖通产品 - 店铺互踩、店铺产品增加销量筛选项 - 公用采集箱支持编辑产品父SKU、AI生成、SKU规格、尺码…

批量压缩图片大小的绝妙技巧,让你的图片更轻盈

在制作幻灯片演示时&#xff0c;经常需要插入图片作为视觉辅助&#xff0c;通过批量缩小图片大小&#xff0c;可以减小演示文件的大小&#xff0c;方便共享和传输。 那么怎么将图片缩小成了问题的关键&#xff0c;市面上不少方法都是需要通过下载软件来处理图片的&#xff0c;…

Chatgpt网页版根据关键词自动批量写原创文章软件【可多开自动登录切换gpt账号】

Chatgpt网页版根据关键词自动批量写原创文章软件介绍&#xff1a; 1、需要放入GPT账号和密码放入在账号库.txt里&#xff0c;可以放入多组账号密码&#xff0c;账号切换轮流使用。 2、可以自定义回答指令&#xff0c;也可多个回答指令随机切换。 3、可以给关键词加双标题&…

Django中的FBV和CBV

一、两者的区别 1、在我们日常学习Django中&#xff0c;都是用的FBV&#xff08;function base views&#xff09;方式&#xff0c;就是在视图中用函数处理各种请求。而CBV&#xff08;class base view&#xff09;则是通过类来处理请求。 2、Python是一个面向对象的编程语言…

java强转实验

不存在继承关系时&#xff0c;强转会出现编译时异常。即&#xff1a;无法将两个不同类型的对象做转换 当存在继承关系时&#xff0c;强转正常。备注&#xff1a;同名字段&#xff0c;类型一致&#xff0c;可以强转替代getset。同名字段&#xff0c;类型不一致&#xff0c;强转会…

HarmonyOS数据管理与应用数据持久化(一)

一. 数据管理概述 功能介绍 数据管理为开发者提供数据存储、数据管理能力&#xff0c;比如联系人应用数据可以保存到数据库中&#xff0c;提供数据库的安全、可靠等管理机制。 数据存储&#xff1a;提供通用数据持久化能力&#xff0c;根据数据特点&#xff0c;分为用户首选项、…

Spring Cloud应用- Eureka原理、搭建

初期对Spring Cloud的学习以应用搭建为主&#xff0c;所以内容不会太枯燥。 一直以来&#xff0c;自以为Spring全家桶的学习中&#xff0c;Spring framework是基础中的基础&#xff0c;部分内容也还是必须要读源码去理解底层原理&#xff0c;SpringMVC、SpringBoot&#xff0c…

11.2树的高度,表达式树,非递归遍历,层序遍历,奇偶树

课上 前序&#xff0c;根左右 中序&#xff0c;左根右 若前序中序相同&#xff0c;则树都没有左节点 求树的高度 表达式树 中缀表达式树 主要考虑括号问题 这个就是考虑递归底层&#xff0c;要结束时的情形&#xff1b;以及根节点的情形&#xff1b; 由于表达式树是满树&…

使用稳定扩散和SAM修改图像内容

推荐稳定扩散AI自动纹理工具&#xff1a; DreamTexture.js自动纹理化开发包 介绍 大型语言模型 &#xff08;LLM&#xff09; 和基础计算机视觉模型的最新突破为编辑图像或视频解锁了新的界面和方法。您可能听说过修复、复绘、生成填充和文本到图像;这篇文章将向您展示如何通过…

【git】git拉取代码报错,fatal: refusing to merge unrelated histories问题解决

大家好&#xff0c;我是好学的小师弟。今天准备将之前写的代码&#xff0c;拉到新的工程文件夹(仓库)下面&#xff0c;用了pull命令&#xff0c;结果报错了&#xff0c;报错截图如下 $ git pull https://gitee.com/* #仓库地址 fatal: refusing to merge unrelated histor…

JavaEE-cookie和session

本部分内容包括 cookie基本概念&#xff0c;sendcookies和getcookies代码&#xff1b; session基本概念&#xff0c;session实现登陆界面&#xff1b; 上述过程中涉及的代码如下&#xff1a; 1 import javax.servlet.ServletException; import javax.servlet.annotation.WebSe…

java实现pdf文件添加水印,下载到浏览器

java实现pdf文件添加水印&#xff0c;下载到浏览器 添加itextpdf依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.8</version> </dependency>文件下载到浏览器和指定路径 …

Java-数组的定义与使用

本章重点&#xff1a; 1. 理解数组基本概念 2. 掌握数组的基本用法 3. 数组与方法互操作 4. 熟练掌握数组相关的常见问题和代码 1. 数组的基本概念 1.1 为什么要使用数组 public class TestStudent{public static void main(String[] args){int score1 70;int s…

有色金属冶炼VR虚拟场景互动教学有何优势

真实模拟&#xff1a;VR虚拟现实技术可以提供一个真实的虚拟环境&#xff0c;模拟钢铁制造现场&#xff0c;包括设备、工艺流程、操作规程等&#xff0c;使学员获得直观、真实的体验。 安全可靠&#xff1a;钢铁制造技能培训可以在虚拟环境中进行&#xff0c;不会对人员或设备造…

Java架构师知识产权与标准化

目录 1 导学2 知识产权概述3 保护期限4 知识产权人的确定4 侵权判断5 标准划分想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 2 知识产权概述 知识产权是指公民、法人、非法人单位对自己的创造性智力成果和其他科技成果依法享有的民事权。是智力成果的创造人依…

JVM虚拟机:堆结构的逻辑分区

堆内存的逻辑分区 堆内存的逻辑分区如下所示: 堆内存中分为新生代和老年代,二者空间大小1:3。在新生代里面分为两类区域(eden、survivor),三个区域(eden、survivor、survivor),三个区大小比例为8:1:1。 对象存放的位置 栈 当我们new一个对象的时候,首先会将对象…

Jorani远程命令执行漏洞 CVE-2023-26469

Jorani远程命令执行漏洞 CVE-2023-26469 漏洞描述漏洞影响漏洞危害网络测绘Fofa: title"Jorani"Hunter: web.title"Jorani" 漏洞复现1. 获取cookie2. 构造poc3. 执行命令 漏洞描述 Jorani是一款开源的员工考勤和休假管理系统&#xff0c;适用于中小型企业…

如何提高滚柱导轨的精度?

滚柱导轨是一种高精度的传动零部件&#xff0c;起导向作用&#xff0c;如果滚柱导轨的精度受损&#xff0c;则无法达到预期的使用效果&#xff0c;那么&#xff0c;我们应该如何提高滚柱导轨的精度呢&#xff1f; 1、优化材料选型&#xff1a;选用高质量的材料作为制造导轨的原…

Jetpack:026-Jetpack中的Slider

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack多点触控相关的内容&#xff0c;本章回中 主要介绍Slider。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧&#xff01; 1. 概念介绍 我们在本章回…