C++友元 friend

友元

友元的作用

友元,就是类似好朋友一样的存在,其他人进不来你的私密(private)处,但是友元可以。

能做友元的对象

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

全局函数做友元

平常情况(全局函数不是友元)

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

class Room {
public:
	string public_place;
private:
	string private_place;
};


void wantIn(Room *other) { 
	cout << "我可以进入" << other->public_place << endl;
	cout << "我可以进入" << other->private_place << endl; // error 报错,因为权限是private

}

那作为好朋友想要进去,怎么办
在类里面申明“好朋友证书”

class Room {
friend void wantIn(Room * others);
public:
	string public_place;
private:
	string private_place;
};

这样全局函数wantIn就可以访问具有私密权限的成员变量了

类做友元

class Room;

class goodFriend {
public:
	Room* room;
public:
	goodFriend();
	void visit();
};

class Room {
friend goodFriend; //核心代码
public:
	Room();
	string public_place;
private:
	string private_place;
};

//写到类外
Room::Room() {
	this->private_place = "私密房间";
	this->public_place = "公开房间";
}

goodFriend::goodFriend() {
	this->room = new Room;
}
void goodFriend::visit() {
	cout << "我可以进入" << room->public_place << endl;
	cout << "我可以进入" << room->private_place << endl;
}

void test() {
	goodFriend gf;
	gf.visit();

}

这次构造函数和成员函数,都拿到外面来写(但是要在类内声明)。如果全部写到类内太拥挤。

最核心的代码还是在Room类里friend goodFriend这说明了goodFirend是它的友元。

成员函数做友元

现在只想要goodFirend里面的成员函数visit可以访问room的私有权限,visit2不能访问

class Room;

class goodFriend {
public:
	Room* room;
public:
	goodFriend();
	void visit();
	void visit2();
};

class Room {
friend void goodFriend::visit(); //核心
public:
	Room();
	string public_place;
private:
	string private_place;
};

Room::Room() {
	this->private_place = "私密房间";
	this->public_place = "公开房间";
}
goodFriend::goodFriend() {
	this->room = new Room;
}
void goodFriend::visit() {
	cout << "我可以进入" << room->public_place << endl;
	cout << "我可以进入" << room->private_place << endl;
}
void goodFriend::visit2() {
	cout << "我可以进入" << room->public_place << endl;
	cout << "我可以进入" << room->private_place << endl; //error
}

在Room类里面加入firend void goodFirend::visit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值