友元 常成员

友元是一扇通向私有成员的后门  友元即可已是不属于任何类的一般函数,也可以是一个类的成员函数,还可以时整个类.

一 将非成员函数声明为友元函数

在类中进行声明 

friend 类型 函数名(参数表);

二 将同一个函数定义为两个类的友元

1.在类前先声明函数

void sharedFunction(ClassA& a, ClassB& b);

后面分别在两个类中进行声明即可

friend void sharedFunction(ClassA& a, ClassB& b);

2.在类前声明类

#include<iostream>
using namespace std;
class Boat;
class Car;//先声明Car因为会在第一个类中用到Car类
class Boat
{
private:int weight;
public:Boat(int w) :weight(w) {}friend int getTotalWeight(Boat& c1, Car& c2);
};
class Car
{
private:int weight;
public:Car(int w) :weight(w) {}friend int getTotalWeight(Boat& c1,Car& c2);
};

三 友元类

当一个类声明为另一个类的友元时,他的所有成员函数都为另一个类的友元函数

class X{...};

class Y{

                friend Y;//声明类Y是X的友元

                ...

             };

说明:

1.友元关系是单向的,不具备交换性

2.友元关系不具备传递性

四 常对象成员

1.常数据成员

使用const说明的数据成员为常数据成员

如果在一个类中说明了常数据成员,那他的值只由构造函数初始化,其他函数不能改变他的值

2.常成员函数

void add(int a) const;//声明

void add(int a) const{...}使用

调用不需要

可用以保护数据不被修改

题目 友元函数练习

C++考试正在进行。请设计一个学生类student,学号、本次考试成绩是其私有数据成员,同时有一个计算本次考试平均成绩的友元函数
double average(student *p,int count)

以上类名和友元函数的形式,均须按照题目要求,不得修改。

输入是 学号([00001,99999])和成绩,以0结束。(不超过100个学生)
输出是平均成绩。

输入样例:

10001 90
10002 93
0

输出样例:

91.5

参考答案

#include<iostream>
using namespace std;
class student
{
private:int nub;double grade;//成绩可能是double类型的
public:student() :nub(0),grade(0){ }//默认构造函数void setp(int n, double g)//构造函数{nub = n;grade = g;}friend double average(student* p, int count);//在类中声明友元函数
};
double average(student* p, int count)//定义友元函数..一个对象指针指向对象数组
{double sum = 0.0;for (int i = 0; i < count;i++){sum += p[i].grade;//通过对象数组把不同对象的私有成员相加}return sum / count;
}
int main()
{int scount = 0;//计数器以便确定对象个数int nub;double grade;student c[100];//设定对象数组上限,定义对象数组名while ((cin>>nub)&&nub!=0&&nub>=00001&&nub<=99999){cin >> grade;c[scount].setp(nub, grade);//操作不同的对象scount++;}double a = average(c, scount);//定义一个数来接受返回值cout << a << endl;return 0;
}

温故知新:对象数组的定义和使用

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

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

相关文章

Element入门

安装ElementUI组件库 npm install element-ui2.15.3 引入 import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import App from ./App.vue;Vue.use(ElementUI);new Vue({el: #app,render: h > h(App) }); 应用 模板 …

一篇文章带你快速认识边缘计算(必看)

引言 5G时代带来了万物互联的飞跃&#xff0c;但随之而来的是数据量爆炸性增长与集中式数据中心处理模式的瓶颈&#xff1a;响应延迟、带宽压力、安全隐忧。边缘计算应运而生&#xff0c;借鉴生物智能分布式原理&#xff0c;将计算与分析推向数据源头&#xff0c;有效解决了以上…

Linux的重要命令(一)

目录 一.查看当前的工作目录-pwd 二.切换工作目录-cd 三.列表显示目录内容或文件本身-ls 四.通配符 通配符用法 五.设置别名-alias 六.统计文件或目录空间占用情况 七.创建新目录-mkdir 八.创建新文件-touch 九.创建链接文件-ln 十.复制文件或目录 十一.删除文件或目…

通过抖音短视频获客 只需要六步

抖音是当前最受欢迎的短视频平台之一&#xff0c;拥有庞大的用户群体和强大的社交矩阵&#xff0c;已经成为企业打造品牌口碑和快速获客的一种有效方式。那么&#xff0c;如何利用抖音短视频快速获客&#xff0c;打造品牌口碑呢&#xff1f;小马识途营销顾问简要分析如下&#…

文件操作;

目录 1.文件的打开与关闭&#xff1b; 打开文件&#xff1b; 关闭文件&#xff1b; 2.文件的打开方式&#xff1b; “r”&#xff08;只读&#xff09;&#xff1b; “w”&#xff08;只写&#xff09;&#xff1b; 3.文件的顺序读写&#xff1b; 字符输入函数fgetc 代…

离岸人民币与人民币国际化

参考 什么是离岸人民币&#xff1f;它有什么用&#xff1f; - 知乎 “人民币就是人民币&#xff0c;为什么要在它前面加上离岸二字&#xff1f;” “既然有离岸人民币&#xff0c;是否有在岸人民币&#xff1f;” 今天我们就简单了解一下什么是离岸人民币。 离岸/在岸人民币…

matlab关于COE文件之读取操作

平台&#xff1a;matlab2021b 场景&#xff1a;在使用fir滤波器后&#xff0c;我们使用matlab生成coe文件后。在xilinx新建IP的后&#xff0c;数据流经过FIR的IP核后数据位宽变宽。这时候我们需要对数据进行截位。这时候需要读取coe文件求和后&#xff0c;计算我们需要截位的位…

突破销售瓶颈!淘宝商品关键词搜索电商API接口助力增长

近年来&#xff0c;随着电商行业的飞速发展&#xff0c;越来越多的卖家遇到了销售瓶颈的问题。无论是面对竞争激烈的市场环境&#xff0c;还是受到新产品引领的冲击&#xff0c;找到突破口成为了卖家们迫切需要解决的难题。联讯数据将介绍一种能够助力增长的方法——淘宝商品关…

C语言入门第五天(复合类型)

一、结构体 1.结构体的概述 结构体(struct)可以理解为用户自定义的特殊的复合的“数据类型” 2.结构体变量的定义和初始化 定义结构体变量的方式&#xff1a; 先声明结构体类型再定义变量名在声明类型的同时定义变量 语法格式&#xff1a; // 先声明结构体类型再定义变量名 st…

低噪声放大器是如何实现低噪声放大的功能的

灵敏度作为接收机最重要的指标之一,直接决定了接收机能分辨的最小信号。接收机的灵敏度计算公式如下所示。 Psensitivity=-174dBm+NF+10*lg(BW)+SNR 由接收机灵敏度的计算公式可知,影响接收机灵敏度的指标有噪声系数、带宽和信噪比,因此一旦带宽和信噪比确定了,那么能决…

Java设计模式——代理模式

静态代理&#xff1a; Java静态代理是设计模式中的一种&#xff0c;它通过创建一个代理类来代替原始类&#xff0c;从而提供额外的功能或控制原始类的访问。 如何使用Java静态代理 要创建一个静态代理&#xff0c;你需要有一个接口&#xff0c;一个实现该接口的目标类&#…

民航电子数据库:[E14024]事务内变更操作次数超过最大许可值10000,可通过系统参数max_trans_modify适当调整限制

目录 一、场景二、异常情况三、原因四、排查五、解决 一、场景 1、对接民航电子数据 2、执行delete语句时报错 二、异常情况 三、原因 通过报错信息就可以看出&#xff0c;是系统参数max_trans_modify配置导致 当删除的数据量 > max_trans_modify时&#xff0c;删除就会…

HarmonyOS开发实例:【分布式手写板】

介绍 本篇Codelab使用设备管理及分布式键值数据库能力&#xff0c;实现多设备之间手写板应用拉起及同步书写内容的功能。操作流程&#xff1a; 设备连接同一无线网络&#xff0c;安装分布式手写板应用。进入应用&#xff0c;点击允许使用多设备协同&#xff0c;点击主页上查询…

JVM之方法区的详细解析

方法区 方法区&#xff1a;是各个线程共享的内存区域&#xff0c;用于存储已被虚拟机加载的类信息、常量、即时编译器编译后的代码等数据&#xff0c;虽然 Java 虚拟机规范把方法区描述为堆的一个逻辑部分&#xff0c;但是也叫 Non-Heap&#xff08;非堆&#xff09; 设置方法…

写一个简单的二叉树,简单增加节点和循环的算法

二叉树(Binary Tree)是树的一种常见形式。二叉树的任意结点最多可以有两个子结点&#xff0c;也可以只有一个或者没有子结点。因此二叉树的度数一定小于等于2。二叉树结点的两个子结点&#xff0c;一个被称为左子结点&#xff0c;一个被称为右子结点。二叉树严格区分左右子结点…

Latex学习(从入门到入土)3

第一章&#xff1a;排版矩阵 在LaTeX中&#xff0c;排版矩阵可以使用amsmath宏包提供的几种不同环境来实现。以下是一些常用的环境和它们的使用方式&#xff1a; ### 使用matrix环境 matrix环境是最基础的矩阵环境&#xff0c;它创建一个带有边框的矩阵&#xff0c;元素默认…

精益思维驱动人工智能革新:理论到实践的跃迁之旅

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已成为引领未来的关键力量。在这个变革的时代&#xff0c;如何将精益思维与人工智能相结合&#xff0c;推动AI从理论走向实践&#xff0c;成为行业内外关注的焦点。本文&#xff0c;天行健精益生产顾问将分享…

Macbook M1 Pro使用brew安装Docker并安装Nacos【超详细图解】

目录 一、安装 Docker 二、修改 Docker 镜像地址 三、拉取镜像-举例 Nacos 1.拉取镜像 2.查看本地镜像 3.删除镜像 四、启动容器 1.启动 Nacos 容器&#xff1a; I.方式一【推荐】 II.方式二【懒人推荐】 2.访问 Nacos Web 控制台 3.进入容器和退出容器 五、配置…

【算法基础3】并查集

并查集 现在我们要完成两个操作&#xff1a; 1.将两个集合合并 2.询问两个元素是否在一个集合当中 这两个操作的时间复杂度均为O(n)&#xff0c;但我们使用并查集的话&#xff0c;可以在近乎O(1)的时间内完成这一操作。 基本原理&#xff1a;每个集合用一棵树来表示&#xff0…

麻将的玩法及技巧

麻将是一种古老而受欢迎的博弈游戏&#xff0c;其玩法和技巧多种多样&#xff0c;因地区和玩家习惯的不同而有所差异。以下是一些通用的麻将玩法和技巧&#xff1a; 一、玩法 洗牌与码牌&#xff1a;玩家双手搓动牌&#xff0c;使牌均匀而无序地运动&#xff0c;称为“洗牌”。…