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类的实现

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二维费用背包分组背包

二维费用背包&分组背包 一定要做的

[Spring Cloud] (7)gateway防重放拦截器

文章目录 简述本文涉及代码已开源Fir Cloud 完整项目防重放防重放必要性:防重放机制作用: 整体效果后端进行处理 后端增加防重放开关配置签名密钥 工具类防重放拦截器 前端被防重放拦截增加防重放开关配置请求头增加防重放签名处理防重放验证处理函数bas…

HC-06 蓝牙串口从机 AT 命令详解

HC-06 蓝牙串口从机 AT 命令详解 要使用 AT 命令,首先要知道 HC-06 的波特率,然后要进入 AT 命令模式。 使用串口一定要知道三要素,一是波特率,二是串口号,三是数据格式, HC-06只支持一种数据格式: 数据位8 位&#…

MYSQL数据库-SQL语句

数据库相关概念 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Quer…

第十四篇:数据库设计精粹:规范化与性能优化的艺术

数据库设计精粹:规范化与性能优化的艺术 1. 引言 1.1 数据库设计在现代应用中的核心地位 在数字化的浪潮中,数据库设计如同建筑师手中的蓝图,是构建信息大厦的基石。它不仅关乎数据的存储与检索,更是现代应用流畅运行的生命线。…

打印图形(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i, j;//循环打印&#xff1b;for (i 0; i < 5; i){//列&#xff1b;for (j 0; j &…

Python深度学习基于Tensorflow(9)注意力机制

文章目录 注意力机制是怎么工作的注意力机制的类型 构建Transformer模型Embedding层注意力机制的实现Encoder实现Decoder实现Transformer实现 注意力机制的主要思想是将注意力集中在信息的重要部分&#xff0c;对重要部分投入更多的资源&#xff0c;以获取更多所关注目标的细节…

关于Speech processing Universal PERformance Benchmark (SUPERB)基准测试及衍生版本

Speech processing Universal PERformance Benchmark &#xff08;SUPERB&#xff09;是由台湾大学、麻省理工大学&#xff0c;卡耐基梅隆大学和 Meta 公司联合提出的评测数据集&#xff0c;其中包含了13项语音理解任务&#xff0c;旨在全面评估模型在语音处理领域的表现。这些…

贝叶斯分类器详解

1 概率论知识 1.1 先验概率 先验概率是基于背景常识或者历史数据的统计得出的预判概率&#xff0c;一般只包含一个变量&#xff0c;例如P(A)&#xff0c;P(B)。 1.2 联合概率 联合概率指的是事件同时发生的概率&#xff0c;例如现在A,B两个事件同时发生的概率&#xff0c;记…

Hotcoin Research | 市场洞察:2024年5月6日-5月12日

加密货幣市场表现 加密货幣总市值为1.24万亿&#xff0c;BTC占比53.35%。 本周行情呈现先涨后跌的一种態势&#xff0c;5月6日-9日大盘持续下跌&#xff0c;周末为震荡行情。本周的比特幣现货ETF凈流入&#xff1a;1.1262亿美元&#xff0c;其中&#xff1a;美国ETF流入&…

Google与哈佛大学的科学家团队共同创造了一张人脑中一个极小部分的精细地图

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Linux重定向及缓冲区理解

重定向&#xff1a; 在上一期虚拟文件系统中讲到了每个进程在打开后&#xff0c;都会默认打开3个文件&#xff0c;如下&#xff1a; stdin 标准输入&#xff08;键盘&#xff09; 文件描述符&#xff1a;0 stdout 标准输出&#xff08;显示器&#xff09;文件描述符&a…

C++组合类

类的数据成员不但可以是基本类型&#xff0c;也可以是其它类的对象。 组合类就是指一个类包含其他类的对象作为该类的数据成员。 当组合类创建对象时&#xff0c;其中包含的各个数据成员对象应首先被创建。因此&#xff0c;在创建类的对象时&#xff0c;既要对本类的基本…

贪吃蛇(c实现)

目录 游戏说明&#xff1a; 第一个是又是封面&#xff0c;第二个为提示信息&#xff0c;第三个是游戏运行界面 游戏效果展示&#xff1a; 游戏代码展示&#xff1a; snack.c test.c snack.h 控制台程序的准备&#xff1a; 控制台程序名字修改&#xff1a; 参考&#xff1a…

DELL T630服务器iDRAC分辨率调整办法

对于Dell T630服务器的iDRAC分辨率调整&#xff0c;您需要登录到iDRAC的Web界面。以下是详细的步骤&#xff1a; 登录iDRAC&#xff1a;在浏览器中输入iDRAC的IP地址&#xff0c;然后使用用户名&#xff08;通常是“root”&#xff09;和密码登录。 导航到虚拟控制台&#xff…

(Java)心得:LeetCode——19.删除链表的倒数第 N 个节点

一、原题 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&…

IEEE 802.11标准

在IEEE 802.11标准中使用了扩频通信技术&#xff0c;主要作用是使得抗干扰性更强。 IEEE 802.11在MAC层采用了CSMA/CA协议。 IEEE 802.1x是一种基于端口认证协议。

报表-接口类型的数据源

1、配置 在数据中进行如下配置 配置格式&#xff0c;换行的方式 #API $.data[0].children http://192.168.1.1:9200/apis/getInfo 行1&#xff1a;固定写法&#xff0c;标识这是一个接口类型的数据集 行2&#xff1a;JSONPath格式字符串&#xff0c;对接口的数据进行取值。…

【半个月我拿下了软考证】软件设计师高频考点--系统化教学-关系模式

&#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件设计师考点暴击 ⭐&#x1f170;️进入狂砍分⭐ ⭐软件设计师高频考点文档&#xff0c; ⭐软件设计师高频考点专栏 ⭐软件设计师高频考点⭐ &#x1f3b6;&#xff08;A) 考点1,关系模式 考点&#xff1a; 三个模式相…

kettle经验篇:MongoDB-delete插件问题

目录 项目场景 问题分析 解决方案 MongoDB Delete插件使用总结 项目场景 项目使用的ODS层数据库是MongoDB&#xff1b;在数据中心从DB层向ODS层同步数据过程中&#xff0c;发现有张ODS表在同步过程中&#xff0c;数据突然发生锐减&#xff0c;甚至于该ODS表数据清0。 同步…