20240417,友元 FRIEND

··················本来要学习的吃瓜吃了一下午

目录

[3.1 全局函数做友元](#3.1 全局函数做友元)

[3.2 友元类](#3.2 友元类)

[3.3 成员函数做友元](#3.3 成员函数做友元)

三,友元

3.1 全局函数做友元
复制代码
#include<iostream>
using namespace std;
class Building
{
	friend void goodGay(Building* building);
	//好朋友,可以访问buiding的全部成员
public:
	Building()
	{
		m_SittingRoom = "客厅";
		m_BedRoom = "卧室";
	}
	string m_SittingRoom;
private:
	string m_BedRoom;
};
void goodGay(Building *building)
{
	cout << "好基友的全局函数  正在访问:" << building->m_SittingRoom << endl;
	cout << "好基友的全局函数  正在访问:" << building->m_BedRoom << endl;
}
void test01()
{
	Building bding;
	goodGay(&bding);
}
int main()
{
	test01();
	system("pause");
	return 0;
}
3.2 友元类
复制代码
#include<iostream>
#include<string>
using namespace std;
class Building;

class Goodgay
{
public:
	Goodgay();
	void visit();//参观函数,访问BUIDING中的属性
	Building * building;
};

class Building
{
	friend Goodgay;//GoodGAY类是BUILDING类的好朋友,可以访问BUILDING的私有成员
public:
	Building();
	string m_SittingRoom;
private:
	string m_BedRoom;
};

Building::Building()//类外写成员函数
{
	m_SittingRoom = "客厅";
	m_BedRoom = "卧室";
}
Goodgay::Goodgay()
{
	//创建一个建筑物的对象
	building = new Building;//堆区创建一个BUILDING的对象
	//构造函数解决初始化问题,所以?这是初始化?*building指向这个堆区对象
}
void Goodgay::visit()
{
	cout << "好基友类正在访问:" << building->m_SittingRoom << endl;
	cout << "好基友类正在访问:" << building->m_BedRoom << endl;
}
void test01()
{
	Goodgay gg;
	gg.visit();
}
int main()
{
	test01();
	system("pause");
	return 0;
}
3.3 成员函数做友元
复制代码
#include<iostream>
#include<string>
using namespace std;
class Building;

class Goodgay
{
public:
	Goodgay();
	void visit();//可以访问Buiding私有
	void visit01();//不可以访问Buiding私有
	Building * building;
};

class Building
{
	//friend void visit();这种写法会将VISIT识别为一个全局函数,而不是Goodgay中的成员函数
	friend void Goodgay::visit();
public:
	Building();
	string m_SittingRoom;
private:
	string m_BedRoom;
};

Building::Building()//类外写成员函数
{
	m_SittingRoom = "客厅";
	m_BedRoom = "卧室";
}
Goodgay::Goodgay()
{
	//创建一个建筑物的对象
	building = new Building;//堆区创建一个BUILDING的对象,返回指针
	//构造函数解决初始化问题,所以?这是初始化?building指向这个堆区对象
}
void Goodgay::visit()
{
	cout << "好基友类visit 正在访问:" << building->m_SittingRoom << endl;
	cout << "好基友类visit 正在访问:" << building->m_BedRoom << endl;
}
void Goodgay::visit01()
{
	cout << "好基友类visit01  正在访问:" << building->m_SittingRoom << endl;
	//cout << "好基友类visit01 正在访问:" << building->m_BedRoom << endl;
}
void test01()
{
	Goodgay gg;
	gg.visit();
	gg.visit01();
}
int main()
{
	test01();
	system("pause");
	return 0;
}

想让谁访问,就让谁FRIEND

相关推荐
xlq223227 小时前
22.多态(上)
开发语言·c++·算法
D_evil__7 小时前
[C++高频精进] 并发编程:线程基础
c++
Mr_WangAndy8 小时前
C++17 新特性_第二章 C++17 语言特性_std::any和string_view
c++·string_view·c++40周年·c++17新特性·c++新特性any
水天需0109 小时前
C++ 三种指针转换深度解析
c++
言言的底层世界10 小时前
c++中STL容器及算法等
开发语言·c++·经验分享·笔记
Mr_WangAndy10 小时前
C++17 新特性_第一章 C++17 语言特性___has_include,u8字符字面量
c++·c++40周年·c++17新特性·__has_include·u8字面量
liu****10 小时前
八.函数递归
c语言·开发语言·数据结构·c++·算法
Vanranrr11 小时前
C++临时对象与悬空指针:一个导致资源加载失败的隐藏陷阱
服务器·c++·算法
BestOrNothing_201511 小时前
【C++基础】Day 5:struct 与 class
c++·c·class类·struct结构体·typename模板·private与public
枫叶丹411 小时前
【Qt开发】Qt窗口(三) -> QStatusBar状态栏
c语言·开发语言·数据库·c++·qt·microsoft