C++初阶(七)类和对象

news2024/11/25 10:26:38

在这里插入图片描述


📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录

  • 一、流插入流提取
    • 1、流插入演示
    • 2、流提取演示
    • 3、cplusplus推荐
  • 二、const成员
  • 三、取地址及const取地址操作符重载
  • 四、再谈构造函数
    • 1、构造函数体赋值
    • 2、初始化列表
    • 3、explicit关键字

一、流插入流提取

1、流插入演示

这里我们可能有个问题,之前我们知道流插入流提取可以自动识别类型,但为什么识别不了自定义类型呢?

在这里插入图片描述

打开Cplusplus.com

在这里插入图片描述

在这里插入图片描述

我们可以清楚的看到大部分内置类型已经存在库中,相当于去调用库中的函数,所以可以自动识别类型,而自定义类型没有存在库中,需要我们手写。


在这里插入图片描述
在这里插入图片描述

我们可以看出来上图没法通过,下图可以通过为什么呢?这里是因为,d1<<cout从左往右,第一个必须对应this指针,所以我们可以将这个函数定义在外面。
下午虽然可以打印,但是我们总看别别扭。
在这里插入图片描述

我们定义在了外面,可是成员对象又是私有的,设成公有的又不太好,这里我们涉及涉及友元概念。
在这里插入图片描述

我们可以看出来这样可以执行。

但是我们又有一个问题,如果想打印多个自定义类型,又该怎么做呢?
我们可以这样做。返回类型设为流插入返回,这样可以很好解决问题

在这里插入图片描述在这里插入图片描述

2、流提取演示

在这里插入图片描述

3、cplusplus推荐

新版的cplusplus有出现短路,这里我们可以使用旧版的。
在这里插入图片描述
在这里插入图片描述


二、const成员

将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
在这里插入图片描述

我们来看看下面的代码

在这里插入图片描述
请思考下面的几个问题:

  1. const对象可以调用非const成员函数吗?
  2. 非const对象可以调用const成员函数吗?
    我们通过上述代码来解答

1、不能

在这里插入图片描述

2、可以

在这里插入图片描述

三、取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
在这里插入图片描述

这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容!
如:

在这里插入图片描述
至于下图为什么,不是空呢?原因在于&d2不会去调用非const函数,他会去调用它的默认函数。
在这里插入图片描述


四、再谈构造函数

1、构造函数体赋值

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。
在这里插入图片描述

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


2、初始化列表

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

注意:

  1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
  2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
    引用成员变量
    const成员变量
    自定义类型成员(且该类没有默认构造函数时)

我们知道引用的时候必须初始化,const只能初始化一次,所以这些必须放在初始化列表中

在这里插入图片描述

3.尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。

在这里插入图片描述

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

在这里插入图片描述

我们可以看出答案选D 为什么呢?
因为我们先声明_a2所以我们先初始化a2,在初始化_a1。

3、explicit关键字

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

我们可以看出下图代码可以实现

在这里插入图片描述

但是当我们加上explicit关键字后,就不支持隐式转换了,但是支持强制类型转换

在这里插入图片描述
在这里插入图片描述


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

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

相关文章

Ubuntu更新apt-get安装镜像源

前往清华开源镜像站获取镜像链接 修改镜像源&#xff0c;打开配置文件&#xff0c;将镜像源链接粘贴到配置文件 sudo vim /etc/apt/sources.list更新软件列表到本地 sudo apt-get update更新所有软件&#xff08;非必要&#xff09; sudp apt-get upgrade

Leetcode—100.相同的树【简单】

2023每日刷题&#xff08;十八&#xff09; Leetcode—100.相同的树 递归实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool isSameTree(struct TreeNode* p, struc…

如何当好一面面试官?

最近公司恢复了招聘&#xff0c;重新启动了校招流程&#xff0c;现在都已经 11 月了&#xff0c;刚好赶上校招黄金期&#xff0c;不过提前批的时间已经过了&#xff0c;也是有点神奇。 公司停止招聘好久了&#xff0c;突然重启&#xff0c;赶忙赶急地让我们推荐面试官&#xf…

「Verilog学习笔记」异步复位的串联T触发器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 这道题目里我们有两个需要明确的点&#xff1a; 1. 什么是异步复位 2. 什么是串联的T触发器 关于第一个点&#xff0c;可以看我的这篇文章&#xff0c;已经整理好了&a…

[C++ 中]:6.类和对象下(static成员 + explicit +友元函数 + 内部类 + 编译器优化)

(static成员 explicit 友元函数 内部类 编译器优化&#xff09; 一.static 成员&#xff1a;1.概念引入&#xff1a;1-1&#xff1a;定义全局变量记录个数&#xff1f; 2.如果有多个类需要分开去记录类对象的个数&#xff1f;2-1&#xff1a;可不可以声明成员变量解决&#…

单片机温湿度-光照-DHT11-烟雾气体检测控制系统-proteus仿真-源程序

一、系统方案 本设计采用52单片机作为主控器&#xff0c;液晶1602显示&#xff0c;DHT11温湿度&#xff0c;光照、烟雾气体检测&#xff0c;按键设置报警阀值&#xff0c;蜂鸣器报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 // // …

(免费领源码)php#MySQL软件测试文档管理系统28035-计算机毕业设计项目选题推荐

目 录 摘 要 Abstract 第1章 前 言 1.1 研究背景 1.2 开发意义 1.3 系统开发目标 第2章 系统开发环境 6 2.1 HTTP协议 6 2.2 HTML网页技术 6 2.3 B/S结构 6 2.4 PHP脚本语言 7 2.5 MySQL数据库 7 2.6 Apache简介 8 第3章 需求分析 3.1 需求分析 3.2 系统可…

ChatGPT商务英语邮件写作方法及案例模板

目录 1 前言 2 商务英语email写作技巧 3 商务email完整模板 4 求学科研email模板 5 工作email模板 6 商务沟通email模板 在现代商务环境中&#xff0c;通过电子邮件进行沟通已经成为一种普遍的方式。良好的商务英语邮件写作技巧和模板能够帮助我们有效地传达信息&#xf…

K8s-----pod详解

目录 一、Pod介绍 1、Pod的基础概念 2、pod定义&#xff08;资源清单&#xff09; 二、Pod相关实例 1、初始化容器&#xff08;init容器&#xff09; 2、镜像拉取策略&#xff08;image PullPolicy&#xff09; 3、pod容器重启策略&#xff08;restartPolicy&#xff09…

自定义类型枚举

目录 枚举类型枚举类型的声明扩展枚举类型的优点枚举的优点 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f978; C语言 &#x1f43f;️&#x1f43f;️&#x1f43f…

取消elementUI中table的选中状态和勾选状态赋值

一、取消所有选中 1、表格上绑定ref 2、清空用户选中数据 this.$refs.loopRef.clearSelection()二、勾选状态赋值 获取数据&#xff0c;flag为true则是选中状态&#xff0c;并将前面勾选框设为选中状态 this.listData.forEach(item> {if(row.flag1){this.$refs.loopRef.to…

elasticsearch索引按日期拆分

1.索引拆分原因 如果单个索引数据量过大会导致搜索变慢&#xff0c;而且不方便清理历史数据。 例如日志数据每天量很大&#xff0c;而且需要定期清理以往日志数据。例如原索引为sc_all_system_log&#xff0c;现按天拆分索引sc_all_system_log20220902&#xff0c;sc_all_syste…

IOS渲染流程之提交图层数据至RenderThread进程

大致链路 UIView/CALayer---->CoreAnimation./Core Graphics/Core Image---->GPU Drive-->GPU 图层树/视图树 一个UIView&#xff08;视图&#xff09;对应一个CALayer&#xff08;图层&#xff09;&#xff0c;CALayer对应显示的数据其有个content代表Bitamp&#…

答题测评考试小程序的效果如何

在线答题系统是一种在线练习、考试、测评的智能答题系统&#xff0c;适用于企业培训、测评考试、知识竞赛、模拟考试等场景&#xff0c;管理员可任意组题、随机出题&#xff0c;答题者成功提交后&#xff0c;系统自动判分。 多种题目类型&#xff0c;两种答题模式 练习模式&a…

漏洞复现--大华ICC readpic任意文件读取漏洞

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

Linux--动静态库

1.背景知识 软硬链接&#xff1a; 软硬链接的创建 软链接&#xff1a;ln -s 文件名 s_link 结果&#xff1a; 可以看到text1.txt和s_link->text.txt这两个文件地址&#xff0c;也就是inode编号是不一样的&#xff0c;且硬链接数都为1&#xff1b; 硬链接&#xff1a;l…

VR实景导航在医院内使用有哪些好处?

近年来&#xff0c;VR全景逐渐普及开来&#xff0c;被大众所熟知&#xff0c;而VR全景在医院的应用也是逐渐广泛起来&#xff0c;对于医院各种错综复杂的楼层&#xff0c;VR全景的VR实景导航功能&#xff0c;能够将患者代入一个三维、逼真的虚拟环境中&#xff0c;帮助患者快速…

企业数据库中了360勒索病毒怎么办,勒索病毒解密,数据恢复

随着网络技术的不断发展&#xff0c;越来越多的企业开始走向数字化办公&#xff0c;网络技术的发展给企业的生产运行提供了强有力的支撑。但随之而来的网络安全威胁也不断增加&#xff0c;数据安全成为众多企业关心的主要话题。近期&#xff0c;云天数据恢复中心的工程师接到很…

Pytorch网络模型训练

现有网络模型的使用与修改 vgg16_false torchvision.models.vgg16(pretrainedFalse) # 加载一个未预训练的模型 vgg16_true torchvision.models.vgg16(pretrainedTrue) # 把数据分为了1000个类别print(vgg16_true) 以下是vgg16预训练模型的输出 VGG((features): S…

apollo云实验:定速巡航场景仿真调试

定速巡航场景仿真调试 概述启动仿真环境仿真系统修改默认巡航速度 实验目的福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 自动驾驶汽车在实现落地应用前&#xff0c;需要经历大量的道路测试来验证算法的可行性和系统的稳定性&#xff0c;但道路测试存在成本高昂、…