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

类和对象(下)C++

1.初始化列表

1.为什么有初始化列表,它的作用?

->初始化列表,是构造函数初始化的另一种形式。

->在语法上面理解,初始化列表可以认定为是每个成员变量定义初始化的地方.

->引用成员变量,const成员变量,没有默认构造的类类型变量,他们三者必须要在自身定义时初始化。所以要将他们放在初始化列表的位置进行初始化,否则会编译报错。

2.使用形式

->以冒号作为开始标志,每个初始化以逗号作为分隔符号,每个“成员”变量后有个括号,用来放初始值或表达式。

3.C++11支持成员变量声明的位置给缺省值,主要是用于,该成员变量没有在初始化列表初始化使用的。

4.尽量使用初始化列表,因为尽管你不走初始化列表,也会走初始化列表。因为假设该成员在声明时给了缺省值,那么初始化列表会调用他的缺省值进行初始化,如果没有给缺省值,对于类置类型的成员是否初始化取决于编译器,而自定义类型,会去调用它的默认构造,如果没有相应的默认构造,又没有初始化列表。就会编译报错。

5.初始化列表的顺序,其实是按照成员变量声明的顺序来进行的。跟成员变量在初始列表出现的先后顺序无关。

 例如以下例子:

2.类型转换

1.C++支持内置类型隐式类型转换为类类型对象,需要有相关类型作为构造函数的参数。

2.构造函数前面加explicit就不再支持隐式类型转换。

3.static成员

1.static修饰的成员变量,称为静态成员变量。!!!静态成员变量一定要在类外面进行初始化。

 2.类静态成员变量属于所有的类对象,不属于某个具体的对象,不存在对象中,存在静态区。

3..类静态成员也是类的成员,受类域限制,也受访问限定符的限制(public  protected,private)

4.static修饰成员函数,成为静态成员函数,静态成员函数没有this指针。

5.静态成员函数可以访问静态成员,不能访问非静态的,因为没有this指针。

6.非静态的成员函数可以任意的访问静态成员函数静态成员。

7.突破类域可以访问静态成员 ,可以通过类名::静态成员对象.静态成员来访问静态成员和静态成员函数

8.静态成员不能在声明时给缺省值,因为缺省值是给构造函数初始化列表使用的,而静态成员不属于某一对象,所以不走初始化列表,所以也就不能给缺省值。

例题:

设已经有A,B,C,D 4个类的定义,程序中A,B,C,D构造函数调⽤顺序为?()
设已经有A,B,C,D 4个类的定义,程序中A,B,C,D析构函数调⽤顺序为?()

答案选择:E,B

4.友元 

5.内部类

 1.什么是内部类?

->一个类的定义是在另一个类的内部,!!!内部类是一个独立的类,与定义在全局的相比,他只受到类域和访问限定符的限制,所以外部类定义的对象不包括内部类。

2.内部类默认是外部类的友元类。

3.内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其 他地⽅都⽤不了。

6.匿名对象

1.用类型定义出来的是对象叫做匿名对象,而类型名+对象名定义出来的是有名对象。

2.匿名对象的生命周期只在当前那一行,一般临时定义一个对象当前用一下就可以定义临时对象。

7.对象拷贝时的编译器优化

1.现代编译器会为了尽可能提⾼程序的效率,在不影响正确性的情况下会尽可能减少⼀些传参和传参过程中可以省略的拷⻉。

2.如何优化C++标准并没有严格规定,各个编译器会根据情况⾃⾏处理。当前主流的相对新⼀点的编译器对于连续⼀个表达式步骤中的连续拷⻉会进⾏合并优化,有些更新更"激进"的编译还会进⾏跨跨表达式的合并优化。

今日份鸡汤:“如果没有天赋,那就一直重复!”

今天的学习就到此结束啦!谢谢大家支持!

 

相关文章:

类和对象(下)C++

1.初始化列表 1.为什么有初始化列表,它的作用? ->初始化列表,是构造函数初始化的另一种形式。 ->在语法上面理解,初始化列表可以认定为是每个成员变量定义初始化的地方. ->引用成员变量,const成员变量&am…...

常用在线 Webshell 查杀工具推荐

一、简介 这篇文章将介绍几款常用的在线 Webshell 查杀工具,包括长亭牧云、微步在线云沙箱、河马和VirusTotal。每个工具都有其独特的特点和优势,用于帮助用户有效检测和清除各类恶意 Webshell,保障网站和服务器的安全。文章将深入探讨它们的…...

RPC远程调用框架Dubbo

一、分布式服务调用_什么是RPC RPC(Remote Procedure Call)远程过程调用,它是一种通过网络从远程计算机程序上请求服务。 大白话理解就是:RPC让你用别人家的东西就像自己家的一样。 RPC两个作用: 屏蔽远程调用跟本地调用的区别&#xff0c…...

基于STM32的智能灌溉系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码传感器读取和控制代码应用场景 农业灌溉花园自动灌溉常见问题及解决方案 常见问题解决方案结论 1. 引言 智能灌溉系统通过实时监测土壤湿度和环境温度,自动控制灌溉设…...

Datawhale AI 夏令营 Task3(半成品,仍在学习理解

课程链接 / 知识点整理 (一)...

细腻呵护静音生活缓冲器,家具中的隐形侍者

在忙碌的生活节奏中,家是我们寻找宁静与放松的避风港。而家具缓冲器,就像一位隐形的侍者,在不经意间为我们营造出温馨、宁静的居住环境。它们静静地工作,细腻地呵护着每一处细节,让家的每一次触碰成为一次尊享体验。 细…...

【MATLAB源码-第243期】基于simulink的CUK斩波电路仿真,输出各节点波形。

操作环境: MATLAB 2022a 1、算法描述 CUK电路是一种高效的直流-直流转换器,它以其独特的能量传递方式和高效的电压转换能力,在许多电力电子应用中得到了广泛的使用。下面将详细描述CUK电路的工作原理、各个组成部分以及其在实际应用中的优…...

springboot项目不能同时跑junit4和junit5的解决方法

springboot项目的maven test只会跑junit4 RunWith注解的测试类&#xff0c;而不会跑junit5 ExtendWith的测试类 解决方法&#xff1a;pom加上以下plugin&#xff0c;版本号需要3.0.0-M5及以上 <plugin><groupId>org.apache.maven.plugins</groupId><art…...

【IO】使用消息队列完成两个进程之间相互通信

目录 1、使用消息队列完成两个进程之间相互通信 2、共享内存实现两个进程之间的通信 3、思维导图 1、使用消息队列完成两个进程之间相互通信 //msgsnd.c #include <myhead.h>// 要发送的消息类型 struct msgbuf {long mtype;char mtext[1024]; };// 定义一个宏&#…...

Web开发:用C#的逻辑理解VUE语法(VUE + Webapi小白开发笔记)

适用阅读对象&#xff1a;需要兼顾前端的C#后端开发人员&#xff08;基础笔记&#xff09; 目录 一、后端交互-获取实体数据 二、变量 1.声明 2.作用域 三、字符串的处理 四、数组(列表)的处理 1.数组中的SELECT语法&#xff08;提取特定字段到新数组&#xff09; 2.数…...

操作系统文件位置指针

文件位置指针 与标准IO的文件读写位置指针一样&#xff0c;系统IO时也会有一个表示位置的指针在移动&#xff0c;会随着读写操作的执行向后自动移动 当需要随机位置进行读写操作时&#xff0c;那么需要移动位置指针的位置 off_t lseek(int fd, off_t offset, int whence); 功…...

设计模式的概念

设计模式主要分为三类&#xff1a;创建类的设计模式、结构型设计模式、行为型设计模式。 创建类的设计模式&#xff1a;简单工厂&#xff0c;工厂模式&#xff0c;抽象工厂&#xff0c;建造者&#xff0c;单例&#xff0c;原型 结构型设计模式&#xff1a;代理模式、享元模式 行…...

VMware17下载与安装

1.下载 通过百度网盘分享的文件&#xff1a;VMware17 链接&#xff1a;https://pan.baidu.com/s/1gCine3d3Rp_l3NYAu5-ojg 提取码&#xff1a;ek25 --来自百度网盘超级会员V3的分享 2.安装...

mv命令学习

移动和重命名文件 mv mv命令的作用就是将文件系统的文件从一个地方移动到另一个地方。 $ pwd /home/scott/libby $ ls libby_arrowrock.jpg libby_bak.jpg libby.jpg ➥libby_on_couch.jpg on_floor $ ls ~/pictures/dogs libby_on_floor_01.jpg libby_on_floor_03.jpg li…...

西北航天基地采用Infortrend NAS存储做影视后期及共享

用户背景&#xff1a; 创建最早的综合型航空航天基地&#xff0c;占地5万平方米&#xff0c;每年约300天进行航天试验 挑战&#xff1a; 西北航天基地规模大任务多&#xff0c;分别有不同的项目组负责试验&#xff0c;项目组需要获取试验任务影像资料&#xff0c;用于分析总…...

GitHub每日最火火火项目(8.6)

项目名称&#xff1a;bghira / SimpleTuner 项目介绍&#xff1a;SimpleTuner是一个通用的微调工具包&#xff0c;主要面向Stable Diffusion 2.1、Stable Diffusion 3、DeepFloyd和SDXL等模型。它旨在为这些模型提供一种方便的方式进行微调&#xff0c;以适应不同的应用场景和需…...

LangChain与CI/CD的无缝对接:自动化部署的新前沿

LangChain与CI/CD的无缝对接&#xff1a;自动化部署的新前沿 在当今快速发展的软件开发领域&#xff0c;持续集成/持续部署&#xff08;CI/CD&#xff09;已成为提升开发效率和软件质量的关键实践。LangChain&#xff0c;作为一个假设的编程辅助工具&#xff0c;如果存在&…...

Laravel为什么会成为最优雅的PHP框架?

目录 1. 设计哲学 1.1 表达性语法 1.2 约定优于配置 1.3 优雅的异常处理 2. 核心特性 2.1 Eloquent ORM 2.2 路由系统 2.3 Blade模板引擎 2.4 Artisan命令行工具 3. 社区支持 3.1 丰富的文档和教程 3.2 Packalyst&#xff1a;丰富的扩展包 3.3 社区活动和会议 4.…...

LabVIEW中的Reverse String函数与字节序转换

在LabVIEW中&#xff0c;数据的字节序&#xff08;也称为端序&#xff09;问题通常出现在数据传输和存储过程中。字节序可以分为大端&#xff08;Big-Endian&#xff09;和小端&#xff08;Little-Endian&#xff09;&#xff0c;它们分别表示高字节存储在低地址和低字节存储在…...

用OpenCV与MFC写一个简单易用的图像处理程序

工厂里做SOP及测试报告以及员工资格鉴定等常需用到简单的图像处理&#xff0c;PS等软件正版费用不菲&#xff0c;学习起来成本也高。Windows自带的图像处理软件&#xff0c;用起来也不是那么得心应手。因此我用OpenCV与MFC写了一个简单易用的图像处理程序。 程序界面 基于简单…...

语言的边界,与软件的命运萍

1. 引入 在现代 AI 工程中&#xff0c;Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的&#xff0c;官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为&#xff0c;最好的办法…...

等高线转面(断边界处理+将线的高程属性赋予面)

1 引言想把获得的等高线转化为面&#xff0c;便于统计不同高程下的其他面shp数据&#xff0c;操作中发现两个问题&#xff1a;&#xff08;1&#xff09;等高线若不闭合&#xff0c;则无法生成面&#xff1b;&#xff08;2&#xff09;闭合的等高线生成面后&#xff0c;没有等高…...

【动力心法】别把 PWM 当成魔法!撕碎理想执行器的线性幻觉,论“静摩擦”与“前馈补偿”的绝对镇压

摘要&#xff1a;在纯粹的数学世界里&#xff0c;只要有输入&#xff0c;就必然有输出。但在由钢铁、齿轮、密封圈和润滑油构成的物理世界中&#xff0c;能量必须先缴纳极其昂贵的“过路费”。无数软件开发者迷信于 PID 的数学反馈&#xff0c;天真地以为微小的误差能换来微小的…...

2-4有关项目‘基于音乐喜好的智能选型平台’中间层建立

建立中间层代码&#xff1a;select * from music_top250;CREATE TABLE yinyvepaihang.yinyve_info_mid (-> id INT PRIMARY KEY,-> yinyve_name VARCHAR(500) NOT NULL,-> yinyve_info TEXT NOT NULL,-> author VARCHAR(255),-> publisher …...

.NET 新特性概览与相关文章索引竿

从 UI 工程师到 AI 应用架构者 13 年前&#xff0c;我的工作是让按钮在 IE6 上对齐&#xff1b; 13 年后&#xff0c;我用 fetch-event-source 订阅大模型的“思维流”&#xff0c;用 OCR 解锁图片中的文字——前端&#xff0c;正在成为 AI 产品的第一道体验防线。 最近&#x…...

没有后台服务的鸿蒙应用,算不算“半成品”?——本地 Service Extension 开发真香指南

大家好&#xff0c;我是[晚风依旧似温柔]&#xff0c;新人一枚&#xff0c;欢迎大家关注~ 本文目录&#xff1a;前言一、ExtensionAbility 类型&#xff1a;先搞清“职业分工”&#xff0c;再谈用谁干活1️⃣ ExtensionAbility 大家族速览二、后台服务场景&#xff1a;哪些事儿…...

从零配置ARM交叉编译环境:如何避免GLIBC版本陷阱(附工具链命名解析)

从零配置ARM交叉编译环境&#xff1a;如何避免GLIBC版本陷阱&#xff08;附工具链命名解析&#xff09; 刚接触嵌入式开发的工程师第一次尝试交叉编译时&#xff0c;往往会被各种工具链名称搞得晕头转向。更令人头疼的是&#xff0c;当你好不容易编译出可执行文件&#xff0c;却…...

使用钉钉远程操作你的claude code寺

先回顾&#xff1a;三次握手&#xff08;建立连接&#xff09;核心流程&#xff08;实际版&#xff09; 为了让挥手流程衔接更顺畅&#xff0c;咱们先快速回顾三次握手的实际核心&#xff0c;避免上下文脱节&#xff1a; 第一步&#xff08;客户端→服务器&#xff09;&#xf…...

2025届最火的五大降AI率助手推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 使AI率下降的关键之处在于削减机械感以及模式化的表达。其一&#xff0c;要防止运用常见的高…...

c++如何将图片读入内存_二进制方式读取jpg与png【附代码】

最稳妥做法是用 std::ifstream 以 binaryate 模式读取 JPG/PNG 到 std::vector<unsigned char>&#xff0c;需显式指定二进制标志、正确获取文件大小并校验读取字节数&#xff0c;避免文本模式干扰、内存越界及路径编码问题。用 std::ifstream 以二进制方式读取 JPG/PNG …...