C++学习之友元

友元

目的:让一个函数或者类访问另一个类中私有成员

用全局函数作为友元

先在类中用friend关键字声明友元函数

class Buliding
{
	friend void visit(Buliding& b1);
public:
	string living_room;
	Buliding()
	{
		living_room = "客厅";
		bedroom = "卧室";
	}
private:
	string bedroom;
};

对应的函数就可以访问私有变量

void visit(Buliding &b1)
{
	cout << "正在访问:" << b1.living_room << endl;
	cout << "正在访问:" << b1.bedroom << endl;
}

友元类

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

class Buliding
{
public:
	string living_room;
	Buliding();
private:
	string bedroom;
};

class goodfriend
{
public:
	void visit();//访问Buliding中的属性
	goodfriend();
	Buliding* buliding;
};
//类外写成员函数
Buliding::Buliding()
{
	living_room = "客厅";
	bedroom = "卧室";
}
goodfriend::goodfriend()
{
	//创造建筑物对象
	buliding = new Buliding;//new 会在堆区,
	//如果不new就会在栈区,用完会释放
}
 void goodfriend::visit()
{
	 cout << "正在访问:" << buliding->living_room << endl;
}

 void test()
 {
	 goodfriend g;
	 g.visit();
 }

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

程序流程:
先创建一个goodfriend的对象,同时运行goodfriend的构造函数,goodfriend的构造函数中会创建Buliding对象,同时运行Buliding的构造函数,给Buliding的属性赋值,然后运行visit()访问。
友元类的实现

class Buliding
{
	friend class goodfriend;
public:
	string living_room;
	Buliding();
private:
	string bedroom;
};

这个友元类中的所有函数都可以访问原类的所有属性

成员函数做友元

让某个类中的个别成员函数访问原类的所有属性

	friend void  goodfriend::visit();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值