C++,友元,语法+示例,非常详细!!!!

2023-05-16

友元概念

友元的目的就是让一个函数或者类 访问另外一个类中的私有成员

友元的关键字为 friend

友元的几种实现

  • 全局函数做 友元
  • 类做 友元
  • 成员函数做 友元
  • 重载函数做 友元

全局函数做 友元

#include<iostream>
using namespace std;
class Building
{
	//Friend 全局函数 是 类 Building 的友元 ,可以访问私有属性 
	
	friend void Friend(Building *building);
	public:
		string SittingRoom;
		
		Building()
		{
			SittingRoom = "客厅";
			BedRoom = "卧室";
		}
	private:
		string BedRoom;
		
};
void Friend(Building *building)
{
	cout<<"朋友  "<<building->SittingRoom<<endl; 
	cout<<"朋友  "<<building->BedRoom<<endl; 
}
void test()
{
	Building building;
	Friend(&building);
} 
int main()
{
	test(); 
	return 0;	
} 

普通函数做 友元

即把一个 不属于任何类的普通函数作为某个类的友元函数

#include<iostream>
using namespace std;
class Date
{
	int year,month;
	public:
		Date(int y,int m)
		{
			year = y;
			month = m;
		}
		friend bool Equal(Date d1,Date d2);		
};
bool Equal(Date d1,Date d2)		//普通函数
{
	return (d1.year == d2.year && d1.month == d2.month);
}
int main()
{
	Date you(2020,1),my(2020,2);
	if(Equal(you,my))
		cout<<"1";
	else cout<<"0";
	return 0;
}

重载函数做友元

#include<iostream>
using namespace std;
class Complex
{
	private:
		double a,b;
	public:
		Complex():a(0.0),b(0.0){
		}
		Complex(double _a,double _b)
		{
			a = _a;
			b = _b; 
		}
		friend Complex operator-(Complex A,Complex B);
		void Print()
		{
			cout<<"("<<a<<","<<b<<")";
		}
};
Complex operator-(Complex A,Complex B)
{

	A.a -= B.a;
	A.b -= B.b;
	return A;
}
int main()
{
	Complex A(5.1,2.2);
	Complex B(3.3,2.5);
	A = B - A;
	A.Print();	
	return 0;
}

18

类做 友元

当类A把另一个类B声明为自己的friend之后,B中所有成员函数就都是A的友元函数,可以访问A中成员变量,(A中定义B是友元,B能调用A的成员变量)

举例

#include<iostream>
using namespace std;
class Person;   //因为Person是友元,在声明之前需定义 
class Date
{
	private:
		int year,month,day;
	public:
		Date(int y,int m,int d)
		{
			year = y;
			month = m;
			day = d;
		}
		void Disp()
		{
			cout<<"您需要的日期信息:"<<endl;
			cout<<year<<"-"<<month<<"-"<<day<<endl;
		}
		friend Person;		//Person  是  Date 的友元 ,在此处声明了,所以在前面要定义一下 
};
class Person
{
	private:
		string name;
	public:
		Person(string na)
		{
			name = na;
		}
		void Disp(Date d)		//传入 Date 的 对象 
		{
			d.Disp();			//调用Date的成员函数和数据成员 
			cout<<name<<"是";
			cout<<d.year<<"年出生的\n"; //此处调用了Date的private 数据
		}
};
int main()
{
	Person p("张三");
	Date birthday(2000,1,1);
	p.Disp(birthday);
	return 0;
}

10

说明

  1. 友元的关系是单向的。声明了类B是类A的友元,说明B能访问A的成员变量,但A不能访问B的 (题中Date类中设置了Person是友元,说明Person类可以调用Date类的private 数据,反之不能)
  2. 友元的关系不能传递。B是A的友元,C是B的友元,不代表C是A的友元。
  3. 友元的关系不能继承
  4. 实际工作中一般不会把整个类声明为友元类
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++,友元,语法+示例,非常详细!!!! 的相关文章

  • matlab2018a帮助文档设置为中文

    版本 xff1a matlab2018a 1 主页 预设 2 帮助 文档位置 xff08 第二个 xff09 简体中文 应用 确定 3 结果展示
  • Vue2与Vue3的生命周期一览

    Vue2与Vue3的生命周期 生命周期前言介绍Vue2的生命周期钩子函数Vue3的生命周期钩子函数setup函数Vue3新增生命周期 生命周期 前言介绍 生命周期也称生命周期回调函数 生命周期函数 生命周期钩子 每个 Vue 组件实例在创建
  • FreeRTOS入门

    文章目录 一 FreeRTOS简介二 学习任务三 学习内容多任务程序实现1 相关文件2 头文件的添加3 路径添加4 修改主函数main c 中代码5 将程序烧录到stm32开发板中6 最终结果 四 参考资料 一 FreeRTOS简介 Fre
  • 嘉立创SMT贴片打板流程

    说明 xff1a 打板平台 嘉立创下单助手 使用嘉立创EDA画板可参考以下过程 使用AD画板 xff0c 不同点是 xff08 1 xff09 导出的文件是PCB源文件压缩包 43 BOM表 43 坐标文件 xff08 2 xff09 确保
  • Android Studio安装超详细步骤(包括SDK安装不成功,模拟器无法创建等问题)

    本文主要介绍CPU 为AMD锐龙 和英特尔 两种类型在安装中出现的一些问题 xff0c 两种解决的方案不同 xff0c 所以首先查看属于哪种 xff0c 然后找相对应的安装方法 Android Studio的安装需要准备两个安装文件 xff
  • HTML+CSS仿写京东页面附代码(web前端大作业)

    学习前端时间不多 xff0c 看了两晚上就开始赶实训作业 xff0c 大家看看就行 先来看看效果 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta
  • DIY组装无人机电机+电调+电池+桨叶搭配知识

    以下内容转载至下网址 有一点点修改 DIY组装无人机电机 43 电调 43 电池 43 桨叶搭配知识 xff08 转贴 xff09 多旋翼 模吧 moz8 com https www moz8 com forum php mod 61 vi
  • (每日一练)MATLAB二维插值

    在前面介绍了学习MATLAB的一维插值方法 xff0c 今天来学习MATLAB二维插值方法 首先来看二维插值函数的使用格式 xff1a z1 61 interp2 x y z x1 y1 39 method 39 其中x y z分别是我们给
  • Ubuntu18.04安装D435iSDK和ROS Wapper

    实验室新到D435i深度相机 xff0c 我想来跑跑开源算法 xff0c 安装驱动各种帖子很多 xff0c 我把我看到两篇最有用的帖子整理一下 帖子连接放在文末 1 安装Intel RealSense SDK 2 0 参考 xff1a ht
  • 【Ros控制机械臂学习笔记】move_group C++interface接口学习

    在完成机器人URDF模型建立 xff0c 利用moveit setup assistant配置生成robot moveit config文件夹之后 xff0c 接下来就是要的学习方向有两个 一个是向下位机走 xff0c 即上图的右面 xff
  • MATLAB校准磁力计

    初识magcal函数 语法 A b expmfs 61 magcal D A b expmfs 61 magcal D fitkind 描述 A xff0c b xff0c expmfs 61 magcal xff08 D xff09 返回

随机推荐

  • C语言练习之路--函数篇

    目录 一 前言二 选择题三 编程题1 乘法口诀表2 交换两个整数3 函数判断闰年4 函数判断素数5 递归实现n的k次方6 计算一个数的每位之和 xff08 递归实现 xff09 7 strlen的模拟 xff08 递归实现 xff09 8
  • 使用VOFA调试PID算法

    1 选用FireWater模式 这个模式下才支持多通道数据 2 代码编写 我使用的是cubemx和keil xff08 1 先在cubemx里把串口打开 我用的是401 xff08 2 打开我的Keil继续 span class token
  • 基于 JSP+Mysql 学生成绩查询web系统

    文章目录 一 学习任务二 学习内容1 准备工作1 1 相关软件1 2 源代码 2 连接MySQL3 idea配置4 运行结果5 web访问 三 参考博客 一 学习任务 首先在Mysql中创建相应的学生成绩表 xff0c 然后基于 JSP 4
  • jquery获取指定元素的指定属性的值

    使用jquery获取指定元素的指定属性的值 xff1a 选择器 attr 34 属性名 34 gt 用来获取那些值不是true false的属性的值 选择器 prop 34 属性名 34 gt 用来获取值是true false的属性的值 例
  • Maven3.6.1下载安装基本使用 (初识)(自用)

    对MAVEN的粗浅认识 Apache Maven 是 项目管理与构建工具 基于POM xff08 项目对象模型 xff09 的概念 作用 提供了一套标准化的项目结构 粗浅理解就是 xff0c 通常eclipse xff0c idea等jav
  • VSCode代码格式化快捷键

    我们在编写代码和阅读别人代码的时候 xff0c 容易出现同级元素缩进没有对齐的情况 xff0c 我们需对代码进行格式化 xff0c 以方便自己和他人的阅读 在vscode中使用快捷键 Shift 43 Alt 43 F 使用示例 xff1a
  • for循环【C++】

    for循环 执行一个特定循环的控制结构 for 条件 条件判断 条件处理 执行体 xff1b 条件 条件判断和条件处理都不是必要的 xff0c 当三者都没有 xff0c 则相当于一个无限循环 条件不一定需要在括号内声明和初始化 xff0c
  • 基于深度强化学习的智能船舶航迹跟踪控制

    基于深度强化学习的智能船舶航迹跟踪控制 人工智能技术与咨询 昨天 本文来自 中国舰船研究 xff0c 作者祝亢等 关注微信公众号 xff1a 人工智能技术与咨询 了解更多咨询 xff01 0 引 言 目前 xff0c 国内外对运载工具的研究
  • 面向区块链的高效物化视图维护和可信查询

    面向区块链的高效物化视图维护和可信查询 人工智能技术与咨询 来源 xff1a 软件学报 xff0c 作者蔡 磊等 摘 要 区块链具有去中心化 不可篡改和可追溯等特性 可应用于金融 物流等诸多行业 由于所有交易数据按照交易时间顺序存储在各个区
  • 基于深度学习的磁环表面缺陷检测算法

    基于深度学习的磁环表面缺陷检测算法 人工智能技术与咨询 来源 xff1a 人工智能与机器人研究 xff0c 作者罗菁等 关键词 缺陷检测 xff1b 深度学习 xff1b 磁环 xff1b YOLOv3 xff1b 摘要 在磁环的生产制造过
  • 基于PX4的地面无人车避障系统及路径规划研究

    基于PX4的地面无人车避障系统及路径规划研究 人工智能技术与咨询 来源 xff1a 动力系统与控制 xff0c 作者姜琼阁等 关键词 地面无人车 xff1b 避障 xff1b PX4 xff1b 摘要 地面无人车避障及路径规划是指 xff0
  • 基于图像的数据增强方法发展现状综述

    基于图像的数据增强方法发展现状综述 人工智能技术与咨询 2022 03 22 20 57 点击蓝字 关注我们 来源 xff1a 计算机科学与应用 xff0c 作者冯晓硕等 关键词 数据增强 xff1b 图像数据集 xff1b 图像处理 xf
  • 基于改进SSD算法的小目标检测与应用

    人工智能技术与咨询 点击蓝字 关注我们 来源 xff1a 计算机科学与应用 xff0c 作者刘洋等 关键词 SSD xff1b 深度学习 xff1b 小目标检测 摘要 xff1a 摘要 针对通用目标检测方法在复杂环境下检测小目标时效果不佳
  • Excel线性回归分析

    文章目录 一 学习任务二 学习内容1 1 高尔顿数据集进行线性回归分析1 1 1 父母身高平均值和其中一个子女身高进行回归分析1 1 2 父子身高回归方程1 1 3 母子身高回归方程 1 2 Anscombe四重奏数据集进行回归分析 一 学
  • 组网雷达融合处理组件化设计与仿真

    人工智能技术与咨询 点击蓝色 关注我们 关键词 xff1a 组网雷达 点迹融合 航迹融合 组件化设计 仿真 摘要 数据融合处理是多雷达组网的核心 以典型防空雷达网为参考对象 xff0c 采用组件化设计方式 xff0c 将组网数据融合处理过程
  • 人工智能 知识图谱

    关于举办 2022年数字信息化培训项目系列 知识图谱Knowledge Graph构建与应用研修班线上课程的通知 各有关单位 一 培训目标 本次课程安排紧密结合理论与实践 xff0c 深入浅出 xff0c 循序渐进 从基本概念讲起 xff0
  • 深度学习(Deep Learning)

    知识关键点 1 人工智能 深度学习的发展历程 2 深度学习框架 3 神经网络训练方法 4 卷积神经网络 xff0c 卷积核 池化 通道 激活函数 5 循环神经网络 xff0c 长短时记忆 LSTM 门控循环单元 GRU 6 参数初始化方法
  • 基于深度学习的机器人目标识别和跟踪

    如今 xff0c 深度学习算法的发展越来越迅速 xff0c 并且在图像处理以及目标对象识别方面已经得到了较为显著的突破 xff0c 无论是对检测对象的类型判断 xff0c 亦或者对检测对象所处方位的检测 xff0c 深度学习算法都取得了远超
  • 零基础Linux版MySQL源码方式安装+配置+远程连接完整图解 无坑实录

    无论开发还是运维 xff0c 项目环境搞不定 xff0c 还真让你干不成活 xff0c MySQL在不同场景 不同平台下安装方式也不同 xff0c 本次主要分享centos7下MySQL源码rpm方式安装 xff0c 其它方式后续分享 xf
  • C++,友元,语法+示例,非常详细!!!!

    友元概念 友元的目的就是让一个函数或者类 访问另外一个类中的私有成员 友元的关键字为 friend 友元的几种实现 全局函数做 友元类做 友元成员函数做 友元重载函数做 友元 全局函数做 友元 include lt iostream gt