C++类和对象——友元

2023-05-16

目录

(1),全局函数做友元

(2),类做友元

(3),成员函数做友元


 类中的私有属性,也想让类外特殊的函数或者类进行访问,就需要用到友元的技术,友元的目的就是让一个函数或者类访问另一个类中的私有成员。

友元的关键字为 friend;

友元有三种实现:

全局函数做友元;

类做友元;

成员函数做友元;

(1),全局函数做友元

#include <iostream>
using namespace std;
#include <string>

class Building
{
	friend void GoodGay(Building* building);
public:
	Building()
	{
		m_SittingRoom = "客厅";
		m_BedRoom = "卧室";
	}

public:
	string m_SittingRoom;
private:
	string m_BedRoom;
};

void GoodGay(Building* building)
{
	cout << "GoodGay正在访问客厅:" << building->m_SittingRoom << endl;
	cout << "GoodGay正在访问卧室:" << building->m_BedRoom << endl;
}

void test()
{
	Building building;
	GoodGay(&building);
}

int main()
{
	test();
	system("pause");
	return 0;
}

运行结果:

GoodGay正在访问客厅:客厅
GoodGay正在访问卧室:卧室
请按任意键继续. . .

 全局函数作为一个类的友元,就可以在这个全局函数内部访问到这个类的私有属性。

(2),类做友元

可以将一个类作为另一个类的友元,在这个类中就可以访问到另一个类的私有属性;

#include <iostream>
using namespace std;
#include <string>

class Building
{
	friend class GoodGay;
public:
	Building()
	{
		m_SittingRoom = "客厅";
		m_BedRoom = "卧室";
	}

public:
	string m_SittingRoom;
private:
	string m_BedRoom;
};

class GoodGay
{
public:
	GoodGay()
	{
		building = new Building;
	}

public:
	void visit()
	{
		cout << "visit函数正在访问客厅:" << building->m_SittingRoom << endl;
		cout << "visit函数正在访问卧室:" << building->m_BedRoom << endl;
	}

	Building* building;
};

void test()
{
	GoodGay gy;
	gy.visit();
}

int main()
{
	test();
	system("pause");
	return 0;
}

运行结果:

visit函数正在访问客厅:客厅
visit函数正在访问卧室:卧室
请按任意键继续. . .

 GoodGay作为Building的友元,GoodGay的对象就可以访问Building类对象中的私有属性。

(3),成员函数做友元

类中的成员函数可以作为另一个类的友元,这个成员函数就可以访问另一个类中的私有属性;

#include <iostream>
using namespace std;
#include <string>

class Building;

class GoodGay
{
public:
	GoodGay();

public:
	void visit1();

	void visit2();

	Building* building;
};


class Building
{
	friend void GoodGay::visit1();
public:
	Building()
	{
		m_SittingRoom = "客厅";
		m_BedRoom = "卧室";
	}

public:
	string m_SittingRoom;
private:
	string m_BedRoom;
};

GoodGay::GoodGay()
{
	building = new Building;
}

void GoodGay::visit1()
{
	cout << "visit1函数正在访问客厅:" << building->m_SittingRoom << endl;
	cout << "visit1函数正在访问卧室:" << building->m_BedRoom << endl;
}

void GoodGay::visit2()
{
	cout << "visit2函数正在访问客厅:" << building->m_SittingRoom << endl;
	//cout << "visit2函数正在访问卧室:" << building->m_BedRoom << endl;
}

void test()
{
	GoodGay gy;
	gy.visit1();
	gy.visit2();
}

int main()
{
	test();
	system("pause");
	return 0;
}

运行结果:

visit1函数正在访问客厅:客厅
visit1函数正在访问卧室:卧室
visit2函数正在访问客厅:客厅
请按任意键继续. . .

visit1成员函数是类Building的友元,因此可以访问它的私有属性。

注意:在两个类有交叉时,例如本例中GoodGay中的visit1成员函数是Building的友元,以及GoodGay中的构造函数会用到Building类,需要在使用这些类之前就声明他们,或者通过在类内声明类外初始化的方式使其处于类的声明或定义之后,否则编译器会报未声明的错误。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++类和对象——友元 的相关文章

  • 用ChatGPT搭建公司内部ChatGPT服务器

    一 前言 我是ChatGPT xff0c 一个由OpenAI训练的大型语言模型 我被设计用于回答各种问题并生成文本 xff0c 可以处理多种自然语言任务 xff0c 例如问答 摘要和翻译等 在我的学习过程中 xff0c 我阅读了数百万篇文本
  • 通过串口波特率计算数据传输速率(每秒字节数)

    这个是个古老的问题 上次用串口还是本科时候 xff0c 最近面试被问到了这个问题竟然整蒙了 xff0c 大致是 xff1a 面试老师问 xff1a 9600的波特率每秒可以传输多少个字节 xff1f 我 xff1a e 直接除以8 emmm
  • ChatGPT搭建AI网站实战

    1 概述 ChatGPT是一款基于GPT 3 5架构的大型语言模型 xff0c 它能够进行自然语言处理和生成对话等任务 作为一款智能化的聊天机器人 xff0c ChatGPT有着广泛的应用场景 xff0c 如在线客服 智能助手 个性化推荐等
  • Midjourney关键词分享!附输出AI绘画参考图

    Midjourney 关键词是指用于 Midjourney 这个 AI 绘画工具的文本提示 xff0c 可以影响生成图像的风格 内容 细节等 Midjourney 关键词有一些基本的语法规则和套用公式 xff0c 也有一些常用的风格词汇和描
  • 【AI绘画】——Midjourney关键词格式解析(常用参数分享)

    目前在AI绘画模型中 xff0c Midjourney的效果是公认的top级别 xff0c 但同时也是相对较难使用的 xff0c 对小白来说比较难上手 xff0c 主要就在于Mj没有webui xff0c 不能选择参数 xff0c 怎么找到
  • ChatGPT总是答非所问?如何使用chatgpt定义角色

    一 x1f4dd 定义角色 xff1a ChatGPT 的角色设定 背景信息 xff1a 提供详细 准确的背景信息和前提条件 xff0c 以便 ChatGPT 提供有针对性的回答和建议 任务目标 xff1a 清晰地描述希望 ChatGPT
  • 免费ChatGPT接入-国内怎么玩chatGPT

    免费ChatGPT中文版 OpenAI 的 GPT 模型目前并不提供中文版的免费使用 xff0c 但是有许多机器学习平台和第三方服务提供商也提供了基于 GPT 技术的中文版模型和 API 下面是一些常见的免费中文版 ChatGPT xff1
  • 分享一个国内可用的免费GPT-AI网站

    背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具 xff0c 近期的热度直接沸腾 x1f30b 我们也忍不住做了一个基于ChatGPT的网站 xff0c 可以免登陆 xff01 xff01 国内可直接对话AI xff0c 也有
  • ChatGPT狂飙之下 云计算加速键启动?

    集微网消息 xff0c ChatGPT一夜爆火 xff0c 成为AI届的 流量收割机 有观点认为 xff0c ChatGPT不仅是AI的成功 xff0c 也是云计算的成功 AIGC xff08 人工智能生成内容 xff09 有望开启云计算产
  • ChatGPT :国内免费可用 ChatGPT +Midjourney绘图

    前言 ChatGPT xff08 全名 xff1a Chat Generative Pre trained Transformer xff09 xff0c 美国OpenAI 研发的聊天机器人程序 xff0c 于2022年11月30日发布 C
  • 分享一个国内免费的ChatGPT镜像网址(亲测有效-5月7日更新)

    最近由于ChatGPT的爆火也让很多小伙伴想去感受一下ChatGPT的魅力 xff0c 那么今天就分享几个ChatGPT国内的镜像网址 xff0c 大家可以直接使用 xff01 记得点赞收藏一下呦 xff01 1 Mental AI 地址
  • Chat GPT国内懒人专用版(基于网站开发使用)

    一 xff1a 概述 小伙伴们肯定都知道沸沸扬扬的Chat GPT xff08 全名 xff1a Chat Generative Pre trained Transformer xff09 xff0c 美国Open AI研发的聊天机器人程序
  • Linux 串口编程学习记录(termios.h)

    目录 0 Linux 串口编程简述 1 open close 函数 open 函数参数说明 xff1a close 函数参数说明 2 termios 结构体 a c cflag 控制模式标志位可选参数 xff08 unsigned shor
  • 手把手教你怎么搭建自己的ChatGPT和Midjourney绘图(含源码)

    AI程序采用NUXT3 43 LARAVEL9开发 xff08 目前版本V1 1 7 xff09 授权方式 xff1a 三个顶级域名 43 两次更换 1 AI智能对话 对接官方和官方反代 xff08 markdown输出 xff09 PS
  • CLion中文乱码问题解决

    问题描述 xff1a 向 C语言编程 say Hello World 之后 xff0c 小白在 CLion 中运行第一个 C语言程序 xff0c 又撞墙了 xff0c 运行结果中文是乱码 xff0c 如图 xff1a 解决方案 xff1a
  • 润和软件携OpenHarmony最新成果出席2021AIoT开源科技节

    12月10日 xff0c 2021 AIOT开源科技节暨OpenHarmony技术论坛在广州召开 xff0c 润和软件作为OpenHarmony项目的初始共建单位之一及积极的生态贡献者受邀出席大会 润和软件鸿蒙研发总监石磊在科技节技术论坛中
  • 解决Maven打包时报错"The packaging for this project did not assign a file to the build artifact"...

    今天在IDEA中打包Maven项目安装到本地仓库时报错 Failed to execute goal org apache maven plugins maven install plugin 2 4 install default cli
  • 嵌入式软件工程师面试题收录(1)

    最近收集了许多嵌软的面试题 xff0c 内容都是在很多文章中剪下来的 xff01 1 用预处理指令 define 声明一个常数 xff0c 用以表明1年中有多少秒 xff08 忽略闰年问题 xff09 define SECONDS PER
  • 嵌入式软件工程师面试题收录(4)

    最近收集了许多嵌软的面试题和相关知识 xff0c 内容都是在很多文章中剪下来的 xff01 1 什么是物联网 xff1f 物联网的含义是什么 xff1f 万物互联 实时共享 xff0c 对物品进行智能化的识别 定位 跟踪 监控和管理的一种网
  • FreeRTOS个人笔记-挂起/解挂任务

    根据个人的学习方向 xff0c 学习FreeRTOS 由于野火小哥把FreeRTOS讲得比较含蓄 xff0c 打算在本专栏尽量细化一点 作为个人笔记 xff0c 仅供参考或查阅 配套资料 xff1a FreeRTOS内核实现与应用开发实战指

随机推荐

  • FreeRTOS个人笔记-消息队列

    根据个人的学习方向 xff0c 学习FreeRTOS 由于野火小哥把FreeRTOS讲得比较含蓄 xff0c 打算在本专栏尽量细化一点 作为个人笔记 xff0c 仅供参考或查阅 配套资料 xff1a FreeRTOS内核实现与应用开发实战指
  • 由浅入深吃透容器云+微服务+K8S+MQ+阿里云内部实施手册

    针对腾讯 百度 阿里 京东等100 43 家互联网公司 xff0c 对其技术方向进行调查和研究 从18年开始 xff0c 各大厂商都陆续把底层业务从KVM Vmware等底层架构开始逐步迁移到Docker 43 K8s体系中来 xff0c
  • Robotics XM430-W350 云台电机使用记录

    XM430 W350 是加拿大 Trossen Robotics 公司生产的一种伺服舵机 公司给这种电机配套了自研的控制协议以及开发 SDK 例程 Dynamixel SDK xff0c 此处记录下基于ROS 的开发例程的使用方法 xff0
  • STM32 FreeRTOS 二值信号量

    二值信号量可以用于任务同步 xff08 任务与任务间 xff0c 任务与中断间 xff09 假设有高 xff0c 中 xff0c 低三个任务 高级任务 xff1a API 创建一个二值量 并返回一个ID xff1a osSemaphoreC
  • 计算机组成原理重点总结(学习笔记)含计算公式

    计算机组成原理总结 一 计算机系统概述计算机系统的多层次结构冯 诺依曼机哈佛结构计算机性能指标 二 数据的表示和运算汉字的编码字符串的存放校验码原码 反码 补码 移码补码定点数的加 减运算浮点数的加 减运算浮点数的表示范围8位二进制整数范围
  • Linux——Firewalld防火墙基础(firewalld-cmd命令操作+firewalld-config图形管理工具)

    文章目录 前言一 Firewalld概述1 1 Firewalld1 2 Firewalld和iptables的关系1 3 Firewalld网络区域 二 Firewalld防火墙的配置方法2 1 firewall cmd命令行工具2 1
  • Centos中Docker的基本操作、镜像创建、数据管理、私有仓库的建立、端口映射和容器互联

    文章目录 一 Docker概述1 1 Docker概述1 2 Docker的核心概念及安装方式 二 Docker的基本操作2 1 环境准备及优化2 2 镜像的基本操作2 3 容器的操作 三 Docker镜像3 1 Docker镜像的分层3
  • 自编码器AutoEncoder解决异常检测问题

    自编码器AutoEncoder解决异常检测问题 一 自编码器 xff08 Auto Encoder xff09 介绍1 AE算法的原理2 AE算法的作用3 AE算法的优缺点 二 自编码器AutoEncoder解决异常检测问题 xff08 手
  • Snipaste(简单好用的截图工具)下载和使用

    下载 下载地址 xff1a https www snipaste com 简单版就够用了 绿色软件 xff0c 直接安装就行 使用快捷键 F1截图 xff0c 可测量大小 xff0c 设置箭头 xff0c 书写文字等F3在桌面置顶显示点击图
  • 通过外部中断按键去控制蜂鸣器开关

    EXTI功能说明 xff1a 要产生中断 xff0c 必须先配置好并使能中断线 根据需要的边沿检测设置2个触发寄存器 xff0c 同时在中断屏蔽寄存器的相应位写 1 允许中断请求 当外部中断线上发生了期待的边沿时 xff0c 将产生一个中断
  • 信号量的使用

    信号量 英文名字 xff1a semaphore 这里的进程信号量会为下列的信号量打基础 Ucos系统的信号量c线程的信号量java进程和线程的信号量 信号量作用 当多个进程 线程进行共享操作时 xff0c 用于资源保护 xff0c 以防止
  • 海康威视摄像头对接SDK实时预览功能和抓拍功能,懒癌福利,可直接CV

    海康威视摄像头完成实时预览功能和抓拍功能 背景思路 流程开发步骤1 海康的SDK xff0c 只需要在项目启动的时候初始化一次就行 xff0c 所以我直接将初始化SDK和加载DLL库的代码丢到启动类中去了 xff1a 2 先讲实时预览功能
  • 一、什么是SLAM?

    书中定义 xff1a slam是指移动智能体从一个未知环境里未知地点出发 xff0c 在运动过程中通过自身传感器观测周围环境 xff0c 并根据环境定位自身位置 xff0c 再根据自身的位置进行增量式的地图构建 xff0c 从而达到同时定位
  • ROS 创建工作空间流程

    本文以移植代码为例说明 目标是把一款云台SDK中的ROS代码部分抠出来移植到自己创建的工作空间中 记录下大致的流程 目录 1 创建工作空间 2 编译工作空间 xff08 可选 xff09 3 设置环境变量 xff08 可选 xff09 4
  • 边缘计算系列之MEC介绍

    前言 上篇内容 xff0c 跟大家简单介绍了边缘计算发展现状和边缘计算的基本概念 今天 xff0c 我们来讲讲MEC 目录 一 MEC的基本概念 二 MEC和边缘计算的关系 三 MEC的价值和优势 四 运营商MEC白皮书 1 MEC的基本概
  • 元学习(meta learning) 最新进展综述论文,28页pdf

    关注上方 深度学习技术前沿 xff0c 选择 星标公众号 xff0c 资源干货 xff0c 第一时间送达 xff01 本文综述了元学习在图像分类 自然语言处理和机器人技术等领域的应用 与深度学习不同 xff0c 元学习使用较少的样本数据集
  • 王海峰、李飞飞、山世光、王井东、汪玉……众多AI华人学者入选2022 IEEE Fellow...

    来源 xff1a 机器之心 北京时间 11 月 24 日凌晨 xff0c IEEE 公布了 2022 年度新一届会士的入选完整名单 IEEE 全称是美国电子电气工程师学会 xff08 Institute of Electrical and
  • 博后年薪58万起,副教授35万起,出站享80万安家费或100万房补,西电杭州研究院...

    来源 博士后招聘平台 编辑 硕博就业圈 研究院简介 XDU HANGZHOU 西安电子科技大学杭州研究院是西安电子科技大学为深入贯彻落实党中央 国务院关于深化产教融合改革部署和教育部 国家发展改革委 财政部关于加快新时代研究生教育改革发展的
  • 为什么要使用事件委托,使用事件委托的好处

    事件委托在我们程序员应聘阶段好多人都会被面试官问及到 xff0c 那到底什么是事件委托呢 xff1f 其实啊 xff0c 事件委托是本应给子元素注册的事件 xff0c 注册在父元素身上 然后使用 e tage方法由父元素统一分配给每个触发了
  • C++类和对象——友元

    目录 xff08 1 xff09 xff0c 全局函数做友元 xff08 2 xff09 xff0c 类做友元 xff08 3 xff09 xff0c 成员函数做友元 类中的私有属性 xff0c 也想让类外特殊的函数或者类进行访问 xff0