C++程序设计——类和对象II

news2024/12/24 8:49:40

一、再谈构造函数

1.构造函数体赋值

        在创建对象时,编译器通过调用构造函数,给对象中各个成员变量赋一个合适的初始值。

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

2.初始化列表

初始化列表:

        以一个冒号开始,接着一个以逗号分隔的数据成员列表,每个成员变量后跟一个放在括号中的初始值或表达式。

注意:

1.每个成员变量在初始化列表中只能出现一次(因为初始化只能初始化一次)

2.类中包含以下成员,必须放在初始化列表位置进行初始化:

     1)引用成员变量

     2)const成员变量

     3)自定义类型成员(该类没有默认构造函数)

3.尽量使用初始化列表进行初始化

        因为无论你是否使用初始化列表,对于自定义类型成员,一定会先使用初始化列表初始化

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

3.explicit关键字

单参构造函数:

        构造函数不仅可以构造与初始化对象,对于单个参数的构造函数,还具有类型转换的作用

赋值流程:

(1)编译器先使用变量,调用单参构造函数创建一个临时对象。

(2)然后用临时对象给对象赋值。

(3)赋值完后将临时对象销毁。

explicit关键字:

        使用explicit关键字修饰构造函数,将会禁止单参构造函数的隐式转换

二、static成员

1.概念

        声明为static的类成员称之为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。

        静态的成员变量一定要在类外进行初始化(注:在类外定义时不要加static,但要加上类名::)

2.特性

1.静态成员为所有类对象所共享,不属于某个具体的实例

2.静态成员变量必须在类外定义,定义时不添加static关键字

3.类静态成员即可用类名::静态成员或者对象.静态成员来访问

4.静态成员函数没有隐藏的this指针,不能访问任何非静态成员,也不能调用非静态成员函数

5.静态成员和类的普通成员一样,也有public、protected,private3种访问级别,也可以具有返回值

6.静态成员变量没有存储在对象中

7.静态成员函数不能设置为const成员函数(因为这里const本质是在修饰this)

8.静态成员函数不能设置为虚函数

3.访问方式

(1)对象名.静态成员

(2)类名::静态成员

三、友元

友元分为:友元函数、友元类

        友元提供了一种突破封装的方式,有时提供了便利,但是友元会增加耦合度,破坏了封装,所以不推荐常用。

1.友元函数

        友元函数可以直接访问类的私有成员它是定义在类外部普通函数不属于任何类,但需要在类的内部声明,声明时需要加friend关键字

注意:

1.友元函数可访问类的私有成员和保护成员,但不是类的成员函数

2.友元函数不能用const修饰

3.友元函数可以在类定义的任何地方声明,不受类访问限定符限制

4.一个函数可以是多个类的友元函数

5.友元函数的调用与普通函数的调用和原理相同

2.友元类

        友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类的非公有成员。

特性:

(1)友元关系是单向的,不具有交换性

        比如在A类中声明B类是其友元类,那么可以直接在B类中访问A类的私有成员和保护成员,但是A类中不能访问B类的私有成员和保护成员。

(2)友元关系不能传递

        比如B是A的友元,C是B的友元,但不能说明C是A的友元。

(3)友元关系,不能继承

四、内部类

概念:

        如果一个类定义在另一个类的内部,这个内部的类就叫做内部类。

注意:

1.此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类。外部类对内部类没有任何优越的访问权限。

2.内部类就是外部类的友元类;内部类可以通过外部类的对象参数来访问外部类中的所有成员,但是外部类不是内部类的友元

特性:

1.内部类可以定义在外部类的public、protected、private都可以

2.内部类可以直接访问外部类的static,枚举成员,不需要外部类的对象/类名

3.sizeof(外部类)=外部类,和内部类没有任何关系。

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

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

相关文章

Vue学习笔记(三)

Vue学习笔记三1.组件的引入及使用2.插槽3. 插槽三种写法3.1 第一种3.2 第二种3.3 第三种简化写法4.组件生命周期4.Vue路由1.组件的引入及使用 在components中写入组件Header.vue 在App.vue中进行引入 <template><div><!-- 组件化: 1个页面由不同的部分组合而…

excel日期函数:DATEDIF的几个实际应用公式编写

DATEDIF函数不仅可以用来计算年龄、工龄、工龄工资、项目周期&#xff0c;还可以用来做生日倒计时提醒&#xff0c;项目竣工日倒计时提醒等等。用上它&#xff0c;您再也不会缺席那些重要的日子&#xff0c;不论是亲人生日、项目竣工日&#xff0c;还是儿女的毕业典礼日。DATED…

明道云大湾区2023年季度闭门会议圆满结束

2023年1月12日&#xff0c;明道云在深圳坂田天安云谷召开明道云大湾区2023年季度闭门分享会。超过百位来自中大型企业组织的IT部门代表和业务技术专家莅临现场&#xff0c;进行了一下午的同台交流。广汽本田、深圳龙华区人民医院、民生银行及华润置地的项目代表&#xff0c;深度…

WebService最优方案选择

需求 最近&#xff0c;接触到了一个java对接C#的项目&#xff0c;使用WebService技术开发。项目已经快告一段落了&#xff0c;经过这几个月接触和使用。我有了一个清晰的认识&#xff0c;之前也调研了互联网上大部分实现的通讯&#xff0c;他们的优缺点&#xff0c;我都有一定…

linux系统下如何获取文件的创建时间

linux 获取文件的创建时间 提到获取文件的创建时间&#xff0c;写Java的小伙伴可能会说&#xff0c;那太简单了&#xff0c;java.nio.file.attribute.BasicFileAttributes下这个类不就记录了文件的相关信息吗&#xff0c;比如下面这段代码不就得到文件的创建时间了嘛&#xff…

chrono_CLOCK(二)

chrono_CLOCK&#xff08;二&#xff09; 文章目录chrono_CLOCK&#xff08;二&#xff09;从测量C程序运行时间引入C风格C风格时钟的成员和源码分析成员函数成员变量Clock提供的操作例子三个clock区别例子三个clock的精度问题方式一方式二从测量C程序运行时间引入 C风格 在C…

数据库,计算机网络、操作系统刷题笔记33

数据库&#xff0c;计算机网络、操作系统刷题笔记33 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

自定义View的学习笔记1-1

这一系列主要是跟随扔物线的学习笔记。 自定义View主要是三个部分&#xff0c;绘制&#xff0c;布局&#xff0c;触摸反馈。 绘制是这三个部分中&#xff0c;最重要的一个。 先说绘制&#xff0c;所谓绘制&#xff0c;指的就是控件内容的显示。啥意思&#xff0c;比如我们作…

02 技术太卷我学Apex-级联值列表

02 技术太卷我学Apex-级联值列表 0 值列表概念 就是页面输入时从下拉列表中选择固定值。 值列表可以在APEX中【共享组件】-【其它组件】-【值列表】创建&#xff0c;也可以也页面上自己用sql语句&#xff08;一般需要级联值列表最好在页面上创建&#xff09;创建。 1 创建一…

Node版本锁定

Node版本锁定问题方案一、锁定Node版本二、自动切换Node版本问题 接手项目时&#xff0c;不知道项目所用的Node版本同一个项目&#xff0c;不同人用不同的Node版本&#xff0c;引起编译后的未知问题 方案 一、锁定Node版本 在package.json中配置 engines&#xff0c;限定项目…

【微电网】基于改进粒子群算法的微电网优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

云原生周刊 | 使用 ChatGPT 协助解决 Prometheus 告警

开源项目推荐 kubernetes-chatgpt-bot 这是一个适用于 Slack 的 ChatGPT 机器人&#xff0c;只要有监控告警发送到 Slack 频道中&#xff0c;你就可以通过机器人向 ChatGPT 咨询如何解决这个告警&#xff0c;ChatGPT 将会给出一个较为详细的解决方案。 Copacetic Copacetic …

WEB文件管理器和上传器:GleamTech FileUltimate 8.5.1.0

GleamTech FileUltimate适用于 ASP.NET Core、MVC 和 WebForms 的FileUltimate文件管理器和上传器 将文件管理器快速集成到您的 ASP.NET 应用程序或站点中。 使用访问控制浏览和管理文件。 接受具有高级上传功能的文件&#xff08;上传器也可作为独立组件使用&#xff09;。 提…

应用程序进程启动过程

1 应用程序进程简介 想要启动一个应用程序&#xff0c;首先要保证这个应用程序所需要的应用程序进程已经启动。 AMS 在启动应用程序时会检查这个应用程序所需要的应用程序进程是否已经存在&#xff0c;如果不存在就会请求 Zygote 进程启动需要的应用程序进程。 在 Zygote进程启…

2023牛客寒假算法基础集训营1--鸡玩炸蛋人(带权并查集) 诈骗题?

题目如下&#xff1a; 示例1 输入 6 4 1 2 2 3 1 3 4 6 0 0 0 0 0 0输出 14示例2 输入 6 4 1 2 2 3 1 3 4 6 0 0 0 0 2 0输出 1题目链接 题解 or 思路&#xff1a; 首先如果我们理解题意了&#xff0c;这个题是顶级诈骗。 因为是无向图&#xff0c;我们需要记录图中 环…

算法第十三期——BFS-双向广搜

双向广搜 应用场景&#xff1a;有确定的起点s和终点t&#xff1b;把从起点到终点的单向搜索&#xff0c;变换为分别从起点出发和从终点出发的“相遇”问题。操作&#xff1a;从起点s(正向搜索&#xff09;和终点t(逆向搜索&#xff09;同时开始搜索&#xff0c;当两个搜索产生…

编程太难不适合女生学?来看 N 多小姐姐的回应!

某女程序员&#xff1a;我要去互联网公司做程序员&#xff1f;网友&#xff1a;你疯了&#xff1f;程序员很累的... 女生不适合做程序员&#xff0c;还是去做产品经理吧。画外音&#xff1a;我去&#xff0c;产品经理不累吗&#xff1f;并不是女生不适合写代码&#xff0c;也不…

python cairosvg 库专题博客,10分钟掌握 cairosvg

cairosvg 库用于将 SVG 图像转换为其他图片格式。它使用 Cairo 库来绘制 SVG 图像&#xff0c;并支持将 SVG 图像转换为 PNG、PDF、PS、SVG 和 GIF 格式。 python cairosvgPython cairosvg 上手案例cairosvg 直接将 svg 图像转换为二进制数据cairosvg 库函数清单总结Python cai…

趣味三角——第1章——角

平面角是平面内相交但不在一条直线上的两条直线之间的倾角(A plane angle is the inclination to one another of two lines in a plane which meet one another and do not lie in a straight line.)。 ——Euclid(欧几里得), 元素(The Elements)&#xff0c;定义8。 几何实体…

【C++】Hash开散列,unordered_set(map) 的封装以及迭代器的实现

上一篇博客我们使用闭散列的方式实现了 Hash&#xff0c;其实在STL库unordered_set、unordered_map中底层是开散列的方式实现的Hash&#xff0c;所以&#xff0c;本篇博客就再使用开散列的方式实现Hash&#xff0c;并将unordered_set、unordered_map进行封装。 目录 一、开散…