C++友元(friend)

C++友元详解与应用

在 C++ 中,友元(Friend) 是一种机制,允许非成员函数或其他类访问当前类的 private 和 protected 成员,而不需要通过类的公有接口。友元关系破坏了封装性,但在某些情况下(如运算符重载、紧密耦合的类)可以提高灵活性。

友元的三种形式

1、友元函数(Friend Function):非成员函数可以访问类的私有成员。
2、友元类(Friend Class):另一个类可以访问当前类的私有成员。
3、友元成员函数(Friend Member Function):另一个类的特定成员函数可以访问当前类的私有成员。

 友元函数

友元函数不是类的成员,但可以访问类的 private 和 protected 成员。

//Complay.h
class Complay
{
public:
	Complay(string name) { this->Name = name; };
private:
	int age = 19;
public: 
	string Name;
	friend void GetAge(Complay &obj);

};
#include "Complay.h"

void GetAge(Complay& obj)
{
	cout << "your age is " << obj.age << endl;
}

int main()
{
	Complay complay = Complay("HX");
	GetAge(complay);
}

我们通过友元函数GetAge访问了Complay类中的私有元素age

友元类

如果一个类声明另一个类为友元,那么友元类的所有成员函数都可以访问当前类的 private 和 protected 成员。

//Complay.h
class Complay
{
public:
	Complay(string name) { this->Name = name; };
private:
	int age = 19;
public: 
	string Name;
	friend class FriendClass;

};
class FriendClass
{
public:
	void GetAge(Complay& obj)
	{
		cout << "your age is " << obj.age << endl;
	}
};
Complay complay = Complay("HX");
FriendClass fc;
fc.GetAge(complay);

友元关系是单向的(A 友元 B ≠ B 友元 A)。
友元关系不能继承(基类的友元不能访问派生类的私有成员)。
适用于紧密耦合的类(如 Container 和 Iterator)。

友元成员函数

可以只让另一个类的某个特定成员函数成为友元,而不是整个类

friend void  FriendClass::GetAge(Complay &obj);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值