【C++打怪之路Lv5】-- 类和对象(下)

news2024/11/20 18:27:27

🌈 个人主页:白子寰
🔥 分类专栏:C++打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)

再谈构造函数

构造函数体赋值

前文提到,在给对象实例化时,不显式写构造函数的情况下,编译器会默认生成无参的构造函数给类中成员变量初始化

但是, 在C++中,成员变量的初始化是指在其声明时进行的赋值,这只能发生一次

构造函数体内的赋值语句是对成员变量的赋初值,可多次进行。

const成员变量必须在声明时初始化,不能在构造函数体内赋初值

举例理解


初始化列表

初始化列表使用:初始化列表定义在构造函数的函数名和函数体之间逗号开始,冒号隔开各个成员变量

注意点

1、初始化列表的顺序是声明的顺序

2、const对象、引用、没有默认构造自定义类型成员(必须显式传参构造)必须在初始化列表,在定义时初始化

3、初始化列表不管显不显式写编译器都会走一遍

对于自定义类型成员调用默认构造

对于内置类型成员可以不写(private中的成员变量给的缺省值其实就是 初始化列表 <- 正主)【有初始化列表和缺省值用 初始化列表;只有缺省值用缺省值;都没有随机值】

具体原因 

  1. 引用类型的成员变量必须在声明时初始化,因为引用必须在创建时绑定到其引用的对象上,且之后不能更改。

  2. const成员变量必须在声明时初始化,因为它们必须在对象的构造期间被赋予一个常量值,并且之后不能被修改。

  3. 没有默认构造函数的自定义类型成员变量在初始化时需要传参,因为它们无法通过默认构造函数来初始化,必须通过参数化的构造函数来提供必要的初始值(像是一个特殊的机器,它不能自己启动,你必须给它一些特定的零件(参数)来启动它)


explicit 关键字

谈谈内置类型变量类型转换

 内置类型变量类型转换 ①影响代码的可读性,②也增加了消耗

引出explicit 关键字,

怎么用? 在构造函数名前加关键字 explicit

作用:禁止类型转换

 




static 成员

概念 

能计算程序中创建过多少个类对象


特征

1)静态成员属于类而非对象,存储于静态存储区。可通过类名和作用域解析运算符直接访问静态成员函数,无需通过对象。
2)静态成员变量在类外定义时无需`static`关键字,但类内声明时需加`static`
3)静态成员函数不包含`this`指针,因此无法直接访问非静态成员
4)静态成员遵循访问限定符(public、protected、private)的规则,其访问权限与普通成员相同。




友元

友元函数

友元函数是非成员函数,可通过在类内部声明并使用`friend`关键字授权访问类的私有和保护成员。

在类外定义了一个函数,想要访问类中的私有成员变量,这时就要用到友元

在类中实现流插入运算符的重载函数

参数顺序和操作数顺序是一致的,不能颠倒(成员函数第一个变量通常是this指针)

注意点

1. 友元函数能够访问类的私有和保护成员,但并不属于类的成员函数
2. 友元函数声明中不能用`const`关键字;
3. 友元声明可在类的任何访问级别区域进行,不受类访问限定符影响。
4. 同一函数可被多个类声明为友元。
5. 友元函数的调用方式与普通函数相同。

 

友元类

友元类和友元函数类似,可以访问类中的所有成员和函数

注意点

1.友元类不要多用,因为某种程度破坏封装

2. 友元关系是单向的

如果类A是类B的友元,则A可以访问B的私有和保护成员,但反之不成立。
3. 友元关系不具有交换性

类A是类B的友元并不意味着类B自动成为类A的友元。
4. 友元关系不能传递

如果类A是类B的友元,且类B是类C的友元,这并不授予类A对类C的访问权限。
5. 友元关系不能继承

子类不会继承其基类的友元关系。

 




内部类

概念 

如果像类A中有一个类B定义在这里,我们称 类B 为内部类


特征

1. 内部类可声明在外部类的任何访问区域(public、protected、private)。
2. 内部类可直接访问外部类的静态成员,无需通过外部类实例或类名。
3. 外部类的大小不包括内部类的成员(内部类是独立的)


内部类和外部类的关系 

  1. 内部类作用域受外部类限制;
  2. 内部类自动拥有访问外部类私有成员的权限,而外部类无权访问内部类的私有成员。

 


匿名对象

概念

有时候我们只需要用一次某个类的方法,如果为了这个方法专门创建一个对象并给它起个名字,就显得有点麻烦。

此时引入匿名对象,匿名对象就是创建时不用给它起名字的对象。

特点

用完就消失,比如你在某一行代码中用它,到了下一行它就不存在了,系统会自动清理掉。所以,对于那些只用一次的对象,我们可以直接用匿名对象,方便快捷(适用于单次调用的场景,以避免不必要的对象命名和延长生命周期




 ***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。

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

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

相关文章

基于MTK7981平台,学习了解理解SoC上电和boot流程

当SoC芯片流片回来后&#xff0c;并不是直接通电就可以使用的。需要进行上电复位&#xff0c;然后对SoC进行配置使其进入到正常工作状态&#xff0c;然后才能运行正常的程序和任务。这是一个比较复杂的过程&#xff0c;也是在芯片设计阶段&#xff0c;SoC需要重点考虑的问题。上…

机器人的性能指标

1. 负荷能力 负荷能力负荷能力是指机器人在满足其他性能要求的情况下,能够承载的负荷重量。例如,一台机器人的最大负荷能力可能远大于它的额定负荷能力,但是达到最大负荷时,机器人的工作精度可能会降低,可能无法准确地沿着预定的轨迹运动,或者产生额外的偏差。机器人的负荷量与…

如何确定光纤用几芯 用光纤与网线区别在哪里

光纤用几芯&#xff1f; 光纤芯数&#xff0c;主要和光纤连接的设备接口和设备的通信方式有关。一般来说&#xff0c;光纤中光芯的数量&#xff0c;为设备接口总数乘以2后&#xff0c;再加上10%&#xff5e;20&#xff05;的备用数量&#xff0c;而如果设备的通信方式有设备多…

Linux数据备份

1、Linux服务器中哪些数据需要备份 1&#xff09;Linux系统重要数据&#xff1a; ①/root/目录&#xff0c;管理员家目录 ②/home/目录&#xff0c;普通用户家目录 ③/etc/目录 &#xff0c;系统重要的配置文件保存目录 2&#xff09;安装服务的数据&#xff1a;例apache①…

新160个crackme -070-CodeFantasy-crackme

运行分析 需破解用户名和注册码点击注册无反应 PE分析 Delphi程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida找到关键字符串&#xff0c;进入函数 动态调试关键函数&#xff0c;逻辑&#xff1a;对Names进行sub_408A68函数加密得到v14&#xff0c;若v14与Ser…

<<迷雾>> 第5章 从逻辑学到逻辑电路(4)--或门及其符号 示例电路

info::操作说明 鼠标单击开关切换开合状态 系统中使用一个类似箭头的形状表示或门 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch05-13-or-gate.txt 原图

使用TiDB企业版Lightning导入ORC文件到TiDB

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/818f84f0 TiDB Lightning 是用于从静态文件导入 TB 级数据到 TiDB 集群的工具&#xff0c;常用于 TiDB 集群的初始化数据导入。在开源社区版本中&#xff0c;TiDB Lightning 支持以下文件…

疾风大模型气象,基于大模型预测未来天气的探索

引言 天气预测一直是科学领域的重要课题&#xff0c;影响着农业、航空、交通等多个行业。传统的天气预报依赖于数值天气预报&#xff08;Numerical Weather Prediction, NWP&#xff09;模型&#xff0c;这些模型基于物理定律和历史数据来模拟大气运动。然而&#xff0c;随着数…

LUCEDA IPKISS Tutorial 74:布尔运算去掉部分图层

案例分享&#xff1a;通过布尔运算&#xff0c;将版图部分图层挖空 所有代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3 import numpy as npclass grating_coupler(i3.PCell):_name_prefix "grating_coupler"r i3.Positive…

Spring Task 2024/9/30

Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定时间自动执行某个代码逻辑。 作用&#xff1a;定时自动执行某段java代码。 cron表达式 在线Cron表达式生成器 (qqe2.com)&#x1f448;在线生成网站 入门案例 SkyApplication 启动类 package com.sky;im…

对于 Vue CLI 项目如何引入Echarts以及动态获取数据

&#x1f680;个人主页&#xff1a;一颗小谷粒 &#x1f680;所属专栏&#xff1a;Web前端开发 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、数据画卷—Echarts介绍 1.1 什么是Echarts&#xff1f; 1.2 Echarts官网地址 2、Vue CLI 项目…

【LeetCode】每日一题 2024_10_1 最低票价(记忆化搜索/DP)

前言 每天和你一起刷 LeetCode 每日一题~ 大家国庆节快乐呀~ LeetCode 启动&#xff01; 题目&#xff1a;最低票价 代码与解题思路 今天这道题是经典动态规划&#xff0c;我们定义 dfs(i) 表示从第 1 天到 第 i 天的最小花费&#xff0c;然后使用祖传的&#xff1a;从记忆…

ArduSub程序学习(11)--EKF实现逻辑⑤

状态更新和卡尔曼增益的计算我选择一个进行举例 1.SelectMagFusion SelectMagFusion 函数主要负责选择和处理磁力计&#xff08;磁传感器&#xff09;数据的融合过程。这在导航系统中尤为重要&#xff0c;因为磁力计用于提供航向&#xff08;偏航角&#xff09;的信息&#xf…

Hopcroft算法划分解释

//基于等价类的思想 split(S){foreach(character c)if(c can split s)split s into T1, ..., Tk }hopcroft()split all nodes into N, Awhile(set is still changes)split(s) 根据状态是否为终结状态划分为终结状态A&#xff0c;和非终结状态N 对这两个大集合&#xff0c;分别…

Acwing 组合计数

一个递推式&#xff1a; 从 a 个元素中选择 b 个&#xff0c;有多少种取法 C a b a ( a − 1 ) ⋯ ( a − b 1 ) 1 2 3 ⋯ b a ! b ! ( a − b ) ! C a − 1 b C a − 1 b − 1 从a个元素中选择b个&#xff0c;有多少种取法C_{a}^{b} \frac{a\times(a-1)\times\…

基础算法之双指针--Java实现(上)--LeetCode题解:移动零-复写零-快乐数-盛最多的水

这里是Thembefue 今天讲解算法中较为经典的一个算法 本讲解主要通过题目来讲解以理解算法 讲解分为三部分&#xff1a;题目解析 > 算法讲解 > 编写代码 移动零 题目链接&#xff1a; 移动零 题目解析 这题的题目意思还是比较好读懂的 就是将数组出现零的地方移到数组最后…

【SpringCloud】 统⼀服务⼊⼝-Gateway

统⼀服务⼊⼝-Gateway 1. ⽹关介绍1.1 问题1.2 什么是API⽹关1.3 常⻅⽹关实现ZuulSpring Cloud Gateway 2. 上手 1. ⽹关介绍 1.1 问题 前⾯的课程中, 我们通过Eureka, Nacos解决了服务注册, 服务发现的问题, 使⽤Spring Cloud LoadBalance解决了负载均衡的问题, 使⽤OpenFe…

使用 Seaborn 热图的 5 种方法(Python 教程)

如何计算 SHAP 特征贡献的概述 原文地址: https://mp.weixin.qq.com/s/nBb9oKlSzRW8w7widHJr6w 热图可以让你的数据变得生动。用途广泛且引人注目。在很多情况下,它们可以突出显示数据中的重要关系。具体来说,我们将讨论如何使用它们来可视化: 模型准确度的混淆矩阵时间序列…

如何从硬盘恢复丢失/删除的视频

您是否想知道是否可以恢复已删除的视频&#xff1f; 幸运的是&#xff0c;您可以使用奇客数据恢复从硬盘驱动器、SD 卡和 USB 闪存驱动器恢复已删除的视频文件。 你有没有遇到过这样的情况&#xff1a;当你随机删除文件以释放空间时&#xff0c;你不小心按下了一些重要视频的…

SysML案例-停车场

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>>