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.rhkb.cn/news/325765.html

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

相关文章

图论专题训练

leecode 547 并查集 class Solution { public:int findCircleNum(vector<vector<int>>& isConnected) {ini();int len isConnected.size();for(int i0;i<len;i){for(int j0;j<len;j)if(isConnected[i][j]){unio(i,j);}}int ans 0;for(int i0;i<len;…

面试集中营—Redis面试题

一、Redis的线程模型 Redis是基于非阻塞的IO复用模型&#xff0c;内部使用文件事件处理器&#xff08;file event handler&#xff09;&#xff0c;这个文件事件处理器是单线程的&#xff0c;所以Redis才叫做单线程的模型&#xff0c;它采用IO多路复用机制同时监听多个socket&a…

Obsidian/Typora设置图床

在obsidian中默认图片是保存在本地的&#xff0c;但是在要导出文档上传到网上时&#xff0c;由于图片保存在本地&#xff0c;会出现无法加载图片的问题。 这里引用的一段话&#xff1a; 这里使用picgo-core和gitee实现图床功能&#xff0c; 参考1&#xff1a; Ubuntu下PicGO配…

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

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

AI算法-高数5-线性代数1-基本概念、向量

线性代数&#xff1a;主要研究1、张量>CV计算机视觉 2、研究张量的线性关系。 深度学习的表现之所以能够超过传统的机器学习算法离不开神经网络&#xff0c;然而神经网络最基本的数据结构就是向量和矩阵&#xff0c;神经网络的输入是向量&#xff0c;然后通过每个矩阵对向量…

Calendar 366 II for Mac v2.15.5激活版:智能日历管理软件

在繁忙的工作和生活中&#xff0c;如何高效管理日程成为了许多人的难题。Calendar 366 II for Mac&#xff0c;作为一款全方位的日历管理软件&#xff0c;以其独特的功能和优秀的用户体验&#xff0c;成为您的日程好帮手。 Calendar 366 II for Mac支持多种视图模式&#xff0c…

【Android学习】简单的登录页面和业务逻辑实现

实现功能 1 登录页&#xff1a;密码登录和验证码登录 2 忘记密码页&#xff1a;修改密码 3 页面基础逻辑 java代码 基础页面 XML login_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.and…

2-6 任务 猜数小游戏(单次版)

本任务要求编写一个猜数小游戏&#xff08;单次版&#xff09;&#xff0c;游戏规则是计算机产生一个0到100之间的随机整数&#xff0c;用户通过输入猜测的数字进行猜测&#xff0c;根据猜测情况给出提示&#xff0c;直到猜对为止。编程思路是利用while循环和多分支结构实现永真…

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

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

MyBatis——在WEB中使用MyBatis(MVC架构模式)

一、在 Web 应用中使用 MyBatis 项目目录结构 pojo package org.qiu.bank.pojo;/*** 账户类&#xff0c;封装账户数据* author 秋玄* version 1.0* package org.qiu.bank.pojo* date 2022-09-27-20:31* since 1.0*/ public class Account {private Long id;private String …

数据分析的统计推断

数据分析的统计推断 前言一、提出问题二、统计归纳方法三、统计推断四、统计推断步骤如何进行统计推断统计推断的基本问题点估计区间估计总体方差已知总体方差未知 假设检验假设检验的假设显著性水平 五、检验统计量常见的检验统计量 六、检验方法七、拒绝域八、假设检验步骤九…

报告!Golang冲上来啦!

今天又来讲Go语言&#xff0c;根据全球知名的编程语言排行榜TIOBE在4月份公布的最新的编程语言排名&#xff0c;令人瞩目的是&#xff0c;Go语言已经跃升至历史最高位&#xff0c;位列排行榜第七名&#xff0c;并且Go语言是前十榜单中最年轻的编程语言。这一成绩不仅彰显了Go语…

鲁教版六年级数学上册-笔记

文章目录 第一章 丰富的图形世界1 生活中的立体图形2 展开和折叠3 截一个几何体4 从三个方向看物体的形状 第二章 有理数及其运算1 有理数2 数轴3 绝对值4 有理数的加法5 有理数的减法6 有理数的加减混合运算7 有理数的乘法8 有理数的除法9 有理数的乘方10 科学计数法11 有理数…

CentOS7 安装 Kamailio

https://www.kamailio.org/wiki/packages/rpms 官方文档说 yum -y install yum-utils yum-config-manager --add-repo https://rpm.kamailio.org/centos/kamailio.repo 但目前这样其实行不通 需要这样做&#xff1a; yum install --disablerepokamailio --enablerepokamai…

Oracle 删除表中的列

Oracle 删除表中的列 CONN SCOTT/TIGER DROP TABLE T1; create table t1 as select * from emp; insert into t1 select * from t1; / / --到6000行&#xff0c;构造一个实验用大表T1。 COMMIT; select EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_…

字典是如何实现的?Rehash 了解吗?

字典是 Redis 服务器中出现最为频繁的复合型数据结构。除了 hash 结构的数据会用到字典外&#xff0c;整个 Redis 数据库的所有 key 和 value 也组成了一个 全局字典&#xff0c;还有带过期时间的 key 也是一个字典。(存储在 RedisDb 数据结构中) 字典结构是什么样的呢&#xf…

AI 重塑产品设计

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【linux】linux工具使用

这一章完全可以和前两篇文件归类在一起&#xff0c;可以选择放一起看哦 http://t.csdnimg.cn/aNaAg http://t.csdnimg.cn/gkJx7 拖更好久了&#xff0c;抱歉&#xff0c;让我偷了会懒 1. 自动化构建工具 make , makefile make 是一个命令&#xff0c;makefile 是一个文件&…

C++笔记(体系结构与内核分析)

1.OOP面向对象编程 vs. GP泛型编程 OOP将data和method放在一起&#xff0c;目的是通过封装、继承、多态提高软件的可维护性和可扩展性GP将data和method分开&#xff0c;可以将任何容器与任何算法结合使用&#xff0c;只要容器满足塞饭所需的迭代器类型 2.算法与仿函数的区别 …

vue项目基于WebRTC实现一对一音视频通话

效果 前端代码 <template><div class"flex items-center flex-col text-center p-12 h-screen"><div class"relative h-full mb-4 fBox"><video id"localVideo"></video><video id"remoteVideo">…