首页 > 编程语言 >C++基础知识:友元是什么,友元(全局函数做友元)

C++基础知识:友元是什么,友元(全局函数做友元)

时间:2024-08-12 18:55:00浏览次数:14  
标签:友元 Building livingRoom 函数 C++ 做友元 BedRoom 全局

在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术


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

通俗一点说就是友元,就好比你的闺蜜,你可以让他了解你身上的特有的东西


友元的关键字为 friend

全局函数做友元代码测试:


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

//全局函数做友元

//建筑物类
class Building
{
	//goodGay全局函数是Building好朋友,可以访问Building中私有成员,其实就是友元
	friend void goodGay(Building* building);
public:
	Building() {
		livingRoom = "客厅";
		BedRoom = "卧室";
	}
public:
	string livingRoom;//客厅

private:

	string BedRoom;//卧室


};

//全局函数

void goodGay(Building *building) 
{
	cout << "好朋友全局函数  正在访问:" << building->livingRoom << endl;

	//cout << "好朋友全局函数  正在访问:" << building->BedRoom << endl;//这段代码显然会有问题,因为bedRoom是个私有属性,无法直接访问。

	cout << "好朋友全局函数  正在访问:" << building->BedRoom << endl;//在类中声明friend(友元),现在再运行该代码就不会报错

}

void test01() 
{
	Building building;
	goodGay(&building);
}


int main() {

	test01();

	system("pause");

	return 0;
}

代码解释:

 代码结果:

标签:友元,Building,livingRoom,函数,C++,做友元,BedRoom,全局
From: https://blog.csdn.net/zxn275266/article/details/141138798

相关文章

  • 保姆级下载C++17
    一、下载MSYS2MSYS2是一款跨平台编译套件,方便的帮助我们安装环境,下面是MSYS的官网:MSYS2https://www.msys2.org/下载完成后安装,安装的路径千万不要有中文,把你安装的路径复制一下,以便后续步骤。二、安装GCC安装完成后打开刚才复制的路径,点开msys2.exe,输入以下命令来安装GCCp......
  • windows C++-C++/WinRT 中创建组件和事件(下)
    跨ABI的简单信号如果无需连同事件传递任何形参或实参,则可以定义自己的简单Windows运行时委托类型。以下示例展示Thermometer运行时类的更简易版本。它声明名为SignalDelegate的委托类型,然后使用该类型来引发信号类型事件,而不是具有参数的事件。//ThermometerWRC.i......
  • windows C++-使用 C++/WinRT 的集合
    在内部,Windows运行时集合具有大量复杂的移动部件。但要将集合对象传递到Windows运行时函数,或要实现自己的集合属性和集合类型时,C++/WinRT中有函数和基类可以提供支持。这些功能消除复杂性,并节省大量时间和精力上的开销。IVector是由元素的任意随机访问集合实现的Windo......
  • 2024华为OD笔试机试 - 模拟目录管理功能 (python/c++/java D卷C卷真题算法)
    华为OD机试(C卷+D卷)2024真题目录(Java&c++&python)题目描述实现一个模拟目录管理功能的软件,输入一个命令序列,输出最后一条命令运行结果。支持命令:创建目录命令:mkdir目录名称,如mkdirabc为在当前目录创建abc目录,如果已存在同名目录则不执行任何操作。此命令无输出......
  • C++类和对象(中):构造函数、析构函数、拷贝构造、赋值运算符重载
    文章目录C++类和对象4、类的默认成员函数5、构造函数5.1构造函数的特点5.2实例分析6、析构函数6.1析构函数的特点6.2实例分析7、拷贝构造函数7.1拷贝构造函数的特点7.2实例分析7.3浅拷贝和深拷贝8、赋值运算符重载8.1运算符重载8.1.1运算符重载的特点8.1.2实例分析8.......
  • BOOST c++库学习 之 boost.thread入门实战指南 使用boost.thread库以及读写锁mutex的
    Boost.Thread库简介1.概述Boost.Thread库是Boost库中专门用于处理多线程编程的模块。它提供了一组跨平台的线程管理和同步工具,帮助开发者在C++中更轻松地编写多线程程序。Boost.Thread的设计目标是使多线程编程更加简单、可靠,同时保持高效和可移植性。2.Boost.Thread......
  • C/C++ 知识点:using 关键字
    文章目录一、using关键字1、命名空间别名和成员访问2、类型别名3、继承中的`using`声明4、模板别名5、模板中的`using`声明6、总结前言:C++中的using关键字是一个功能丰富的工具,它主要用于命名空间、类型别名、继承以及模板编程中。下面将详细介绍using关键字的几......
  • Linux C++ 开发3 - 你写的Hello world经过哪些过程才被计算机理解和执行?
    1.C/C++的编译过程1.1.预处理1.2.编译1.3.汇编1.3.1.汇编过程1.3.2.目标文件1.4.链接2.编译过程示例2.1.源代码2.2.逐步编译程序2.2.1.编译指令2.2.2.链接报错问题2.3.单步编译3.gcc/g++与gpp、as、ld的关系3.1.关系图3.2.示例演示......
  • dev c++的使用
    前置软件:devc++首先开始学习前,先把软件下好点开devc++,发现有一个页面如下图:这时按Ctrl+n即可打开一个页面如下:这时你是否已经跃跃欲试了吗,哦不,还得慢慢来先敲上一段代码#include<iostream>usingnamespacestd;intmain(){return0;}好了可以了就完了可以......
  • 开始梦幻之旅--C++
    生活中有许多人人在忙忙碌碌,其中的许多人s都不会想到他们会被代替那个代替别人的东西就是人工智能人工智能是什么,他由什么来做成的呢人工智能是什么早在二战时期,图灵就已经开始了图灵测试,具体如下:一名测试者写下自己的问题,随后将问题以纯文本的形式(如计算机屏幕和键盘)发送......