从零开始的C++编程 2(类和对象下)

目录

1.构造函数初始化列表

2.类型转换

3.static成员

4.友元

5.内部类

6.匿名对象


1.构造函数初始化列表

①之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。
②每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地⽅。
引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始化,否则会编译报错。
④C++11⽀持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显⽰在初始化列表初始化的成员使⽤的。
⑤尽量使⽤初始化列表初始化,因为那些你不在初始化列表初始化的成员也会走初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会⽤这个缺省值初始化。如果你没有给缺省值,对于没有显⽰在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。对于没有显⽰在初始化列表初始化的⾃定义类型成员会调⽤这个成员类型的默认构造函数,如果没有默认构造会编译错误。
⑥初始化列表中按照成员变量在类中声明顺序进⾏初始化,跟成员在初始化列表出现的的先后顺序⽆关。建议声明顺序和初始化列表顺序保持⼀致。

初始化列表总结:
⽆论是否显⽰写初始化列表,每个构造函数都有初始化列表;
⽆论是否在初始化列表显⽰初始化成员变量,每个成员变量都要⾛初始化列表初始化;


2.类型转换

①C++⽀持内置类型隐式类型转换为类类型对象,需要有 相关内置类型为参数的构造函数。
②构造函数前⾯加 explicit就不再⽀持隐式类型转换。
③类类型的对象之间也可以隐式转换,需要相应的构造函数⽀持

3.static成员

①⽤static修饰的成员变量,称之为静态成员变量,静态成员变量⼀定要在 类外进行初始化
②静态成员变量为所有类对象所共享,不属于某个具体的对象, 不存在对象中,存放在静态区
③⽤static修饰的成员函数,称之为静态成员函数, 静态成员函数没有this指针
④静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。
⑤⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。
⑥突破类域就可以访问静态成员,可以通过类名::静态成员 或者 对象.静态成员 来访问静态成员变量和静态成员函数。
⑦静态成员也是类的成员,受public、protected、private 访问限定符的限制。
⑧静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员变量不属于某个对象,不⾛构造函数初始化列表。
//求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
class Sum
{public:Sum()
{_ret += _i;++_i;
}
static int GetRet()
{return _ret;
}
private:static int _i;static int _ret;
};
int Sum::_i = 1;
int Sum::_ret = 0;
class Solution {
public:int Sum_Solution(int n) {// 变⻓数组(牛客网可以编译成功,vs还不支持)Sum arr[n];return Sum::GetRet();}
};

4.友元

①友元提供了⼀种突破类访问限定符封装的⽅式,友元分为:友元函数和友元类,在函数声明或者类声明前⾯加friend,并把友元声明放到⼀个类的里⾯。
②外部友元函数可访问类的私有和保护成员,友元函数仅仅是⼀种声明,他不是类的成员函数
③友元函数可以在类定义的任何地⽅声明,不受类访问限定符限制
④⼀个函数可以是多个类的友元函数。
⑤友元类中的成员函数都可以是另⼀个类的友元函数,都可以访问另⼀个类中的私有和保护成员。
⑥友元类的关系是单向的,不具有交换性,⽐如A类是B类的友元,但是B类不是A类的友元。
⑦友元类关系不能传递,如果A是B的友元, B是C的友元,但是A不是C的友元。
⑧有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多⽤。

5.内部类

• 如果⼀个类定义在另⼀个类的内部,这个类就叫做内部类。内部类是⼀个独⽴的类,跟定义在全局相⽐,他只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类。
• 内部类默认是外部类的友元类。
• 内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其他地⽅都⽤不了。

6.匿名对象

①⽤类型(实参) 定义出来的对象叫做匿名对象,相⽐之前我们定义的类型对象名(实参) 定义出来的叫有名对象
②匿名对象⽣命周期只在当前⼀⾏,⼀般临时定义⼀个对象当前⽤⼀下即可,就可以定义匿名对象。

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

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

相关文章

Profibus DP主站转ModbusTCP网关通讯秘籍

Profibus DP主站转ModbusTCP网关通讯秘籍 在现代工业自动化领域,不同设备间的数据通讯和系统集成至关重要。Profibus DP和Modbus TCP是两种广泛应用的工业通信协议,各有其独特的优势和适用场景。然而,由于历史原因或设备制造商的差异&#x…

【力扣hot100题】(092)最长回文串

有点难度,一开始想到的两种方法都不对,花了不少时间。 先说之前的方法: ① 遍历每个点,每个点向外扩张,如果左等于右就一直扩展直到不等。 这个方法可是可以,但我没有考虑到两个相同字母也是回文串的情况…

14 - VDMA彩条显示实验

文章目录 1 实验任务2 系统框图3 硬件设计4 软件设计 1 实验任务 本实验任务是PS端写彩条数据至DDR3内存中,然后通过PL端的VDMA IP核将彩条数据通过HDMI接口输出显示。 2 系统框图 本实验是用HDMI接口固定输出1080P的彩条图,所以: rgb2lc…

HarmonyOS-ArkUIV2装饰器-@Param:组件外部输入

上文我们了解了@Local装饰器 ,讲明了Local装饰器不允许外部传入值对其进行初始化。详见: HarmonyOS-ArkUI V2装饰器@Local装饰器:组件内部状态-CSDN博客。 但总有场景是需要外部组件传值过来,然后本组件接收这个值这种场景的。而且很多情况下,一个状态变量的作用范围会是…

Java从入门到“放弃”(精通)之旅——运算符③

🌟Java从入门到“放弃”(精通)之旅🚀:运算符深度解析 引言:运算符的本质与价值 作为Java语言的核心组成部分,运算符是构建程序逻辑的基础元素。它们不仅仅是简单的数学符号,更是程…

【sgSpliter】自定义组件:可调整宽度、高度、折叠的分割线

sgSpliter.vue <template><!-- 注意&#xff1a;父组件position必须是relative、absolute或fixed&#xff0c;不建议直接在绑定:data后面用"{属性}"&#xff0c;建议单独在script中声明data&#xff0c;避免拖拽过程重复调用 --><div :class"$…

Ningx负载均衡

Ningx负载均衡 upstream(上游)配置负载均衡1、weight&#xff08;加权轮询&#xff09;2、ip_hash&#xff08;负载均衡&#xff09;3、url hash负载均衡4、least_conn&#xff08;最小连接负载均衡&#xff09; upstream(上游)配置负载均衡 Nginx负载均衡 参考: nginx从安装…

一个插件,免费使用所有顶级大模型(Deepseek,Gpt,Grok,Gemini)

DeepSider是一款集成于浏览器侧边栏的AI对话工具&#xff0c;可免费使用所有顶级大模型 包括GPT-4o&#xff0c;Grok3,Claude 3.5 Sonnet,Claude 3.7,Gemini 2.0&#xff0c;Deepseek R1满血版等 以极简交互与超快的响应速度&#xff0c;完成AI搜索、实时问答、内容创作、翻译、…

众趣科技丨数字孪生技术,赋能交通公共设施管理数字化升级

春节假期期间&#xff08;1 月 21 日至 2 月 4 日&#xff09;&#xff0c;作为中国春节申遗成功后的首个春运&#xff0c;交通出行格外火热&#xff0c;全社会跨区域流动量超 23 亿人次&#xff0c;这一数据创下了历史新高。 面对如此庞大的客流量&#xff0c;传统的交通管理方…

Linux 入门五:Makefile—— 从手动编译到工程自动化的蜕变

一、概述&#xff1a;Makefile—— 工程编译的 “智能指挥官” 1. 为什么需要 Makefile&#xff1f; 手动编译的痛点&#xff1a;当工程包含数十个源文件时&#xff0c;每次修改都需重复输入冗长的编译命令&#xff08;如gcc file1.c file2.c -o app&#xff09;&#xff0c;…

Python-Django+vue二手电子设备交易平台功能说明

❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目…

数据库管理工具实战:IDEA 与 DBeaver 连接 TDengine(二)

五、DBeaver 连接 TDengine 实战 5.1 安装 DBeaver 下载安装包&#xff1a;访问 DBeaver 官方网站&#xff08;https://dbeaver.io/download/ &#xff09;&#xff0c;根据你的操作系统选择合适的安装包。如果是 Windows 系统&#xff0c;下载.exe 格式的安装文件&#xff1…

Spring Boot接口返回Long类型的数据时丢失精度的全局处理

1、问题 当实体类中的字段为Long类型时&#xff0c;通过Ajax请求返回给前段&#xff0c;在js中数据会丢失精度 直接通过postman请求或通过浏览器请求&#xff0c;看下响应则不会丢失精度 2、处理方式 1、使用JsonSerialize注解 JsonSerialize(using ToStringSerializer.…

英伟达Llama-3.1-Nemotron-Ultra-253B-v1语言模型论文快读:FFN Fusion

FFN Fusion: Rethinking Sequential Computation in Large Language Models 代表模型&#xff1a;Llama-3.1-Nemotron-Ultra-253B-v1 1. 摘要 本文介绍了一种名为 FFN Fusion 的架构优化技术&#xff0c;旨在通过识别和利用自然并行化机会来减少大型语言模型&#xff08;LLM…

Django学习记录-1

Django学习记录-1 虽然网上教程都很多&#xff0c;但是感觉自己记录一下才属于自己&#xff0c;之后想找也方面一点&#xff0c;文采不佳看的不爽可绕道。 参考贴 从零开始的Django框架入门到实战教程(内含实战实例) - 01 创建项目与app、加入静态文件、模板语法介绍&#xff…

Python爬虫第7节-requests库的高级用法

目录 前言 一、文件上传 二、Cookies 三、会话维持 四、SSL证书验证 五、代理设置 六、超时设置 七、身份认证 八、Prepared Request 前言 上一节&#xff0c;我们认识了requests库的基本用法&#xff0c;像发起GET、POST请求&#xff0c;以及了解Response对象是什么。…

Python 要致富先修路

今天准备在原有基础上重新深入学习并记录python学习进程。 # 整体思路 不废话&#xff1a; 阶段1&#xff1a;精选入门电子教程坚持学习&#xff1b; 阶段2&#xff1a;跟着教程学习代码思维&#xff0c;做好学习笔记并构建知识库方便以后速查&#xff1b; 阶段3&#xff…

微服务无感发布实践:基于Nacos的客户端缓存与故障转移机制

微服务无感发布实践&#xff1a;基于Nacos的客户端缓存与故障转移机制 背景与问题场景 在微服务架构中&#xff0c;服务的动态扩缩容、滚动升级是常态&#xff0c;而服务实例的上下线需通过注册中心&#xff08;如Nacos&#xff09;实现服务发现的实时同步。但在实际生产环境…

2025年的Android NDK 快速开发入门

十年前写过一篇介绍NDK开发的文章《Android实战技巧之二十三&#xff1a;Android Studio的NDK开发》&#xff0c;今天看来已经发生了很多变化&#xff0c;NDK开发变得更加容易了。下面就写一篇当下NDK开发快速入门。 **原生开发套件 (NDK) **是一套工具&#xff0c;使开发者能…

Shell 编程之条件语句

目录 条件测试操作 文件测试 整数值比较 字符串比较 逻辑测试 if 条件语句 if语句的结构 1、单分支 if 语句 2、双分支 if 语句 3、多分支 if 语句 if语句应用实例 1、单分支 if 语句应用 2、双分支 if 语句应用 3、多分支 if 语句应用 case 分支语句 case语句的结构 case语…