【C++初阶】:类与对象(下)

news2024/11/18 9:29:47

类与对象

  • 一.再谈构造函数
    • 1.初始化列表(构造函数的一部分)
    • 2.explicit关键字
  • 二.static成员
  • 三.友元
    • 1.友元函数
    • 2.友元类
  • 四.内部类
  • 五.匿名对象
  • 六.再次理解类与对象

一.再谈构造函数

1.初始化列表(构造函数的一部分)

在这里插入图片描述

在这里插入图片描述

我们可以直接在函数体内赋值,前面几篇博客都是用的这种方法,但实际上还有一种初始化列表赋值。

在这里插入图片描述

在这里插入图片描述

接下来对几种必须进行列表初始化的情况进行说明。

const和引用成员变量

在这里插入图片描述

为什么不能初始化呢?因为const和引用的特征就是必须在定义时进行初始化。

那么成员在哪个位置进行的初始化呢?其实就是在初始化列表的位置。

在这里插入图片描述

自定义类型成员

自定义类型在初始化时会自动进行默认构造,那么如果没有默认构造怎么办呢?(注意:默认构造不单指编译器默认生成的构造函数,也包括自己写的但不需要传参的构造函数)

例如下面有一个自定义类型A,但我们自己写了构造函数并且需要传参,也就是说它没有默认构造函数时怎么办呢?

在这里插入图片描述

在这里插入图片描述

所以没有默认构造函数的话,我们必须在初始化列表进行显示调用构造函数。

在这里插入图片描述

一个缺陷

这里我们给引用初始化为ref,而ref又是一个局部变量,出了作用域就会被销毁,所以我们还得将代码修改一下。

在这里插入图片描述

一个缺陷

在这里插入图片描述

在这里插入图片描述

为什么这里会出现随机值呢?成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。

2.explicit关键字

给d1进行赋值除了常规的,还可以直接使用等号。

在这里插入图片描述

在这里插入图片描述

这里Date d1=2022,实际上是进行了隐式类型转换。int类型被转换为了Data类型。而我们有没有办法阻止这种隐式类型转换呢?那就得用explicit关键词了。

在这里插入图片描述

在这里插入图片描述

二.static成员

在这里插入图片描述

下面来看一下计算机创建了多少个类的对象

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三.友元

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

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

1.友元函数

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

1.友元函数可访问类的私有和保护成员,但不是类的成员函数
2.友元函数不能用const修饰
3.友元函数可以在类定义的任何地方声明,不受类访问限定符限制
4.一个函数可以是多个类的友元函数
5.友元函数的调用与普通函数的调用原理相同

2.友元类

友元函数是让一个函数成为你的朋友,而友元类是让一个类成为你的朋友。

在这里插入图片描述

例如,下面Data类就是Time类的友元类,那么Date就可以任意访问Time里的成员

在这里插入图片描述

四.内部类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这个类的大小为什么是4呢?因为前面说过static修饰的成员不存在类里,只是在类里声明,而定义在类外面。而这个内部类也并不占空间,它也仅仅是一个声明。内部类是外部类的友元并且如果不想让人访问这个内部类就可以把这个内部类放在私有里。

五.匿名对象

在这里插入图片描述

那么匿名对象有什么用呢?可以看看下面的代码。

在这里插入图片描述

匿名对象有个特点,就是生命周期只在当前行。如果只想调用一次函数那么就可以使用匿名。

特例

在这里插入图片描述

六.再次理解类与对象

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

2023数维杯ABC题思路代码分析

已完成全部可以领取,详情看文末!!! 数维杯A题思路 A题是这次比赛比较难的题目,地下水系统水体污染问题,他给出了我们一些行为特征,污染物的行为特征主要涉及对流迁移、水动力弥散、吸附及阻滞…

一、走进easyUI的世界

1.什么是easyUI? jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要…

matlab实验三程序设计与优化

一、实验目的及要求 一、实验的目的与要求 1、掌握 MATLAB的函数 2、掌握 MATLAB的程序流 3、掌握 MATLAB脚本和函数文件的编写 4、熟悉基于矩阵的程序设计与优化 二、实验原理 1、MATLAB的M文件:脚本文件与函数文件; 2、MATLAB程序流:input…

【企业信息化】第2集 免费开源ERP: Odoo 16 销售管理系统

文章目录 前言一、概览二、使用功能1.通过清晰报价提高销售效率2.创建专业报价单3.管理订单及合同4.简化沟通5.维护产品&价格6.直观的报告7.集成 三、总结 前言 世界排名第一的免费开源ERP: Odoo 16 销售管理系统。通过Odoo Sign应用程序和在线支付,发送报价。…

“极乐净土”时隔7年再度席卷B站,二次元魂藏不住了!

七年前,日本知名歌手美依礼芽发行一曲《极乐净土》,搭配歌曲的宅舞视频燃起了众多二次元魂,翻跳投稿纷至沓来。 可以说,她是许多老二次元人的回忆,也是一个时代的标记。 当时,《极乐净土》横空出世&#…

为什么需要边缘计算?哪些场景需要边缘计算?

为什么需要边缘计算? 边缘计算(Edge Computing)是一种将数据处理和计算功能移到接近数据源头的边缘设备上进行的计算模式。相比传统的云计算模式,边缘计算能够在接近数据源头的地方进行实时的数据处理,这为计算机视觉…

前端vue3一键打包发布

一键打包发布可以分为两种,一是本地代码,编译打包后发布至服务器,二是直接在服务器上拉去代码打包发布至指定目录中。 两种各有使用场景,第一种是前端开发自己调试发布用的比较多,第二种是测试或者其他人员用的多&…

java 二维数组的定义及操作

二维数组的定义有很多方式: 第一种方式: 数据类型[][] 数组名 new数据类型[行的个数][列的个数]; 下面以第一种方式声明一个数组,如下所示。 int[][] xx new int[3][4]; 表示有三行,每行方四个数据第二种方式: 数据类…

甘特图控件DHTMLX Gantt入门使用教程【引入】:dhtmlxGantt 与Node.js(上)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术&am…

Vue3-黑马(三)

目录: (1)vue3-基础-计算属性 (2) vue3-基础-xhr-基本使用 (3)vue3-基础-xhr-promise改造 (1)vue3-基础-计算属性 上面有重复的代码,用计算属性&#xff0…

Kali工具集简介

Kali Linux提供了数种经过定制的专门为渗透测试设计的工具。工具都会按下图中下拉选单所示的方式按组分类聚合。了解工具是做渗透测试第一个认知。 口Information Gathering(信息收集) 这些都是侦察工具,用来收集目标网络和设备的数据。在这类工具中,从找出设备的工具到查看使…

大数据分析案例-基于高斯朴素贝叶斯算法构建良恶性肿瘤识别器

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

时间复杂度和空间复杂度的七七八八

文章目录 时间空间复杂度1. 时间空间复杂度的重要性(作用)2. 时间复杂度和大O表示法1)算法图解2)代码随想录3)王道《数据结构》 3. 大O指的是最糟的情形和一般的情形1)大O表示的是一般情况,并不是严格的上界2&#xff…

算法修炼之练气篇——练气四层

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的…

创建虚拟目录和用户访问控制+虚拟目录

目录标题 虚拟目录配置文件创建配置文件对应的目录资源在创建一个虚拟目录的配置文件 用户访问控制虚拟目录创建用户访问控制权限创建配置文件中的用户资源测试tom用户测试zhangsan用户 虚拟目录 Alias 虚拟目录名称 真是目录路径为了方便对于网站资源进行灵活管理&#xff0c…

使用 MVC 模式,实现简单登录功能 (Kotlin)

先放效果图: 第一张是登录页面效果图。用户输入登录名和密码,经过后台的非空验证和固定值验证,跳转到首页 第二张是首页效果图。用户点击 “update” 显示用户名和密码 这里的用户名和密码是后台设置的固定值,整体的登录逻辑特别…

python+opencv图像形态变换

形态变换主要用于二值图像的形状操作,形态变换的实现原理基于数字形态学。数字形态学也称形态学,它主要从图像内部提取信息来描述图像形态。形态学广泛应用于视觉检测、文字识别、医学图像处理、图像压缩编码等。形态变换主要包括腐蚀、膨胀和高级形态操…

Linux aarch64架构中使用docker安装mysql8

Linux aarch64架构中使用docker安装mysql8 1、遇到问题: 官网下载mysql包,安装完成后,启动mysql一直显示-bash: ./mysqld: 无法执行二进制文件。 网上找了各种资料,但是都没有作用,怀疑自己操作姿势不正确&#xff…

面试题集合

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。 从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提…

DNS:DNS域名解析过程及原理

一、理解IP和域名 我们首先要了解域名和IP地址的区别。 IP地址是互联网上计算机唯一的逻辑地址。 通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别。 但由于IP地址是由一串容易混淆的数字串构成,人们很难记忆所…