C++ 指针 参数 静态 常 友元与组合概念

一 类类型作为函数参数

1 类类型作参数类型的三种方式

1) 对象本身作为参数

由于C++采用传值的方式传递参数,因此使用对象本身参数时,形参是实参的一个拷贝。在这种情况下,最好显式地为类定义一个拷贝构造函数,以免出现不容易发现的错误。

距离:对象本身做函数参数
在这里插入图片描述
对象引用作为参数
这是一种推荐方式。它比对象本身参数或对象指针参数都要容易理解和使用,同时没有任何的副作用。
在这里插入图片描述
对象指针作为参数
对象指针指向实参对象,通过间接方式访问和修改它所指向的对象,实际上就是访问和修改实参对象。

二 对象数组

1 对象数组

与任何其他数据类型一样,可以创建一个类的对象数组。
例如:Clock clocks[10];

通过下标访问数组中的对象,进而访问该对象的公有成员。
例如:clocks[3].ShowTime();

2 数组初始化

1) 显式初始化数组元素

const unsigned arr_size=3;
int ia[array_size]={0,1,2}

2) 隐式初始化

若无显式初始化,则:
在函数体外定义的内置数组,元素均为0
函数体内定义的内置数组,元素无初始化
若元素为类类型,无论在哪里定义,则自动调用该类的默认构造函数进行初始化。如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化。

3 对象数组的初始化

对象数组的初始化过程,实际上就是调用构造函数对每一个数组元素进行初始化的过程。

如果在声明数组时给出每一个数组元素的初始值,在初始化过程中就会调用最匹配的构造函数。

在这里插入图片描述
初始化array[0]时调用的是Point(float,float)构造函数
初始化array[1]时调用的是Point(float)构造函数
初始化array[2]时调用的是Point()构造函数

4 对象指针的加减操作

在这里插入图片描述
在这里插入图片描述

三 静态成员

1 静态成员

当用关键字static说明一个类成员时,该成员称为静态成员。
静态成员分为:
静态数据成员;
镜头成员函数;

2 静态数据成员的定义和初始化

1) 定义静态数据成员

在这里插入图片描述

2) 初始化静态数据成员

int ABCD::s_value=6;//在类外定义静态数据成员,在定义时给初值

例子:静态数据成员的特性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)静态数据成员的使用

静态数据成员也有public和private之分,因此在类外只能访问public属性的静态数据成员,在类内可以访问所有属性的静态数据成员。

由于静态数据成员是属于类的,因此在类外按如下形式访问public静态数据成员:
ABCD:😒_value;
特别地,当类对象不存在时,也可以访问类的静态数据成员。

例:静态数据成员的基本用法

在这里插入图片描述

4) 静态成员函数

静态成员函数的定义
在这里插入图片描述
静态成员函数只属于一个类,它没有this指针。
静态成员函数也可以声明为public或private属性。

四 常对象与常成员(const)

1 常对象与常成员(const)

如果某个对象不允许被修改,则该对象称为常对象。C++用关键字const来定义对象。

const也可以用来限定类的数据成员和成员函数,分别称为类的常数据成员和常成员函数。

常对象和常成员明确规定程序中各种对象的变与不变的界限,从而进一步增加了C++程序的安全性和可控性。

1)常对象

在这里插入图片描述
在这里插入图片描述
常对象不能变,只能调用常成员函数。
啥时用常对象?
(1)函数返回值;(2)函数形参(常引用);

2) 常数据成员

变量的值不能变。
类型 const 数据成员名;或者 const类型数据成员名;
在这里插入图片描述

3) 常成员函数

该函数不能修改对象数据成员的值。
返回类型 成员函数名(参数表)const;
(1) 常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修改的成员函数。
(2) 常对象只能调用它的常成员函数,而不能调用其他成员函数。
(3)const关键字可以用于参与重载函数的区分;
在这里插入图片描述
在这里插入图片描述

五 友元

1 友元关系

封装的目的就是为了实现信息隐蔽
一个对象的私有成员只能被自己的成员访问到。当类外的对象或函数要访问这个类的私有成员时,只能通过该类提供的公有成员间接地进行。

C++提供了友元机制来打破私有化的界限,即一个类的友元可以访问到该类的私有成员。

2 友元函数

问题的提出
Point类代表"点”,考虑如下需求:
需要一个函数来计算任意两点间的距离,那么这个函数该如何设计呢?
在这里插入图片描述

3 友元类

除了将一个普通函数声明为一个类的友元函数外,也可以将一个类Y声明为另一个类X的友元类。
友元类的特点:类Y中的所有成员函数都成员函数都成为类X的友元函数,都能直接访问类X中所有的成员。
在这里插入图片描述
举例

在这里插入图片描述
将成员函数说明为另一个类的友元函数
在这里插入图片描述

对友元关系的总结

友元具有如下的性质:
类的友元可以直接访问它的所有成员。
友元的声明必须放在类的内部,但放在哪个段没有区别。
友元关系不具备传递性,即X是Y的友元,但Y不一定是X的友元。
友元关系不具备传递性,即X是Y的友元,Y是Z的友元,但X不一定是Z的友元。

六 类的组合

1 类的组合

一个类的对象作为另一个类的成员,这体现的是整体和部分的关系,即对象的包含关系,这个作为成员的对象被称为子对象。

举例:
Circle类的实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

基于截断傅里叶级数展开的抖动波形生成

1、背景 抖动是影响信号完整性的重要因素。随着信号速率的不断提高,抖动的影响日益显著。仿真生成抖动时钟或抖动信号,对系统极限性能验证具有重要意义。抖动是定义在时域上的概念,它表征真实跳变位置(如跳边沿或过零点)与理想跳变位…

前端小技巧:如何自定义网页的右键菜单(如何禁用网页的右键菜单)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 右键菜单设置 📒📝 自定义右键菜单实现步骤📝 示例代码📝 涉及的JavaScript语法和参数📝 禁用特定区域的右键菜单⚓️ 相关链接 ⚓️📖 介绍 📖 在网页设计中,一个直观且个性化的右键菜单可以显著提升用户的交互…

前端部署时候开发以及生产环境切换

uniapp 版本切换 在 HBuilderX 中,点击“运行”编译出来的代码是开发环境,点击“发行”编译出来的代码是生产环境 vue3 pnpm run build

ARM架构安全特性之防御执行技术

安全之安全(security)博客目录导读 目录 1、侧信道攻击威胁 2、推测屏障Speculation Barriers 3、栈溢出攻击威胁 4、指针认证PAC 5、分支目标识别BTI 6、内存安全违规威胁 7、内存标记扩展MTE 8、加强数据保护 9、特权不可访问(Privileged Access Never …

蓝桥之链表

最近真的特别焦虑,体测、比赛和考试一个接一个,让人喘不过气来QAQ 甚至考试和比赛还有冲突,sad 最近因为看了牙,打了药的缘故,一直在吃素QAQ 本来今天还想写个知识点总结的,但是太晚了,现在已…

截图识别OCR怎么操作?一键精准识别工具分享

截图识别OCR怎么操作?截图识别OCR软件在现代办公和学习中扮演着越来越重要的角色,它们能够将图片中的文字内容快速准确地转换为可编辑的文本。无论是处理文档、整理笔记,还是进行学术研究、资料收集,这些软件都能快速、准确地将图…

鸿蒙开发接口Ability框架:【(AbilityContext)】

AbilityContext AbilityContext是Ability的上下文环境,继承自Context。 AbilityContext模块提供允许访问特定于ability的资源的能力,包括对Ability的启动、停止的设置、获取caller通信接口、拉起弹窗请求用户授权等。 说明: 本模块首批接口…

告别数据泥潭:PySpark性能调优的黄金法则

阿佑今天给大家带来个一张藏宝图——使用PySpark进行性能调优的黄金法则,从内存管理到执行计划,再到并行度设置,每一步都是提升数据处理速度的关键! 文章目录 Python Spark 详解1. 引言2. 背景介绍2.1 大数据处理技术演变2.2 Apac…

2024最新商业视频打赏系统源码 多套模板 有代理后台 已对接支付

简介: 2024最新商业视频打赏系统源码 多套模板 有代理后台 已对接支付 图片: 源码下载

自存 js course 工厂函数

如图 就是 像工厂一样 生产对象 对象里的函数可以写成简下

Oracle11g账户频繁被锁定的3种解决办法

方法1:创建触发器 方法1:数据库中创建触发器(只记录失败),但是需要开发同意或者开发自己创建。找到密码输入错误的服务器,进行数据源配置的更改。 该方法适用于要求找到密码错误用户所在服务器的场景下。 CREATE OR REPLACE TR…

【一键录音,轻松转换:用Python打造个性化音频记录工具】

在数字化时代,音频记录已成为日常学习、工作和娱乐不可或缺的一部分。想象一下,只需简单按下几个键,即可随时随地捕捉灵感,记录会议要点,或是珍藏孩子的童言稚语。本文将引领您步入Python编程的奇妙世界,展示如何借助几个强大的库,构建一个既简单又实用的音频录制及转换…

STM32快速入门(总线协议之I2C一主多从(软件实现 硬件实现))

STM32快速入门(总线协议之I2C一主多从(软件实现 & 硬件实现)) 前言 支持一对多(一主多从)、多对多传输(多主多从),只支持半双工,一般有两根数据线&…

Android性能:高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧

Android性能&#xff1a;高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧 如果在Androidmanifest.xml配置&#xff1a; <application android:hardwareAccelerated"false" > 或者某个特点View使用代码&#xff1a; myView.setLayerType(View.LAYER_TYPE_SOFT…

合并连个有序链表(递归)

21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 2.讲解算法原理 2.1重复子问题 2.2只关心其中的一个子问题是如何解决的 2.3细节&#xff0c;递归出口 3.小总结 &#xff08;循环&#xff08;迭代&#xff09;VS 递归&#xff09;&#xff08;递归VS深搜&…

从零开始的软件测试学习之旅(九)jmeter直连数据库及jmeter断言,关联

jmeter直连数据库及断言,关联 jmeter直连数据库步骤jmeter断言jmeter逻辑控制器if控制器ForEach控制器循环控制器 Jmeter关联Jmeter关联XPath提取器Jmeter关联正则表达式提取器二者比较跨线程组关联 每日复习 jmeter直连数据库 概念 这不叫直连:Jmeter -> java/python 提供的…

一套MySQL读写分离分库分表的架构,被秀到了!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

数据增强,迁移学习,Resnet分类实战

目录 1. 数据增强&#xff08;Data Augmentation&#xff09; 2. 迁移学习 3. 模型保存 4. 102种类花分类实战 1. 数据集 2.导入包 3. 数据读取与预处理操作 4. Datasets制作输入数据 5.将标签的名字读出 6.展示原始数据 7.加载models中提供的模型 8.初始化…

Android Studio在android Emulator中运行的项目黑屏

前言&#xff1a; 最近在做一个Android相关的小项目&#xff0c;因为之前这方面的项目做的比较的少。今天在使用虚拟机调试的时候经常出现一些莫名其妙的问题&#xff0c;经过自己多次的尝试和搜索终于解决了这些问题。 问题&#xff1a; 每次run&#xff08;运行&#xff09…

【机器学习300问】88、什么是Batch Norm算法?

一、什么是Batch Norm&#xff1f; &#xff08;1&#xff09;Batch Norm的本质 神经网络中的Batch Normalization&#xff08;批量归一化&#xff0c;简称BatchNorm或BN&#xff09;是一种改进神经网络训练过程的规范化方法&#xff0c;BatchNorm的主要目的是加速神经网络的训…