friend函数访问2个类的对象的私有成员

本文介绍了如何使用友元函数来访问两个不同类的私有成员。通过在两个类中分别声明同一函数为友元,该函数即可同时访问这两个类的私有成员。文中给出了具体的代码示例,展示了这一特性的实现方式。

用friend可以让一个函数访问一个类的对象的私有成员,如果想让一个函数访问2个类的对象的私有成员,则必须在第2个类中也声明该函数为友元函数
(1)CA.h:

class CB;//前向声明使用CB类
class CA
{
public:
 friend void FUNC( CA* pa, CB* pb);//友元函数
}
---------------------
(2)CB.h:
 
class CA;//前向声明使用CA类
class CB
{
public:
 
 friend void FUNC( CA* pa, CB* pb);//友元函数
}
---------------------
(3)CA.cpp:
void FUNC( CA* pa, CB* pb){}//友元函数的实现
---------------------------------------------------------------

总结:
一个普通函数可以是(多个)类的友元函数。这类普通函数的参数都有类的对象,从而通过该对象,操作该类的私有成员,该函数被当作全局函数。

### C++ 友元函数访问私有成员的权限 在C++中,友元是一种特殊的机制,它允许一个函数绕过封装规则,直接访问另一个的私有和受保护成员。当某个函数被声明为友元时,它可以访问的所有私有成员,包括私有成员变量和私有成员函数[^1]。 #### 友元函数的定义与作用 友元函数不是的成员函数,但它可以访问私有成员。友元函数的声明需要在内部使用 `friend` 关键字,并且友元函数本身不需要属于任何。一旦某个函数被声明为友元,它就可以像访问公有成员一样访问私有成员[^2]。 以下是一个友元函数访问私有成员的示例: ```cpp #include <iostream> using namespace std; class MyClass { private: int privateValue; public: MyClass(int val) : privateValue(val) {} friend void printPrivateValue(MyClass obj); // 声明友元函数 }; void printPrivateValue(MyClass obj) { cout << "Private Value: " << obj.privateValue << endl; // 访问私有成员 } int main() { MyClass obj(42); printPrivateValue(obj); // 输出 Private Value: 42 return 0; } ``` 在这个例子中,`printPrivateValue` 函数被声明为 `MyClass` 的友元函数,因此它可以访问 `MyClass` 的私有成员 `privateValue`[^3]。 #### 友元的定义与作用 除了友元函数,整个也可以被声明为另一个的友元。这意味着友元中的所有成员函数都可以访问被友元关系连接的私有成员。例如: ```cpp #include <iostream> using namespace std; class MyClass { private: int privateValue; public: MyClass(int val) : privateValue(val) {} friend class FriendClass; // 声明友元 }; class FriendClass { public: void printPrivateValue(MyClass obj) { cout << "Private Value: " << obj.privateValue << endl; // 访问私有成员 } }; int main() { MyClass obj(42); FriendClass friendObj; friendObj.printPrivateValue(obj); // 输出 Private Value: 42 return 0; } ``` 在这个例子中,`FriendClass` 被声明为 `MyClass` 的友元,因此 `FriendClass` 中的成员函数可以访问 `MyClass` 的私有成员 `privateValue`[^4]。 #### 注意事项 - 友元关系不会自动传递或继承。即使一个是另一个的友元,这种关系也不会扩展到它们的派生。 - 滥用友元可能会破坏封装性原则,导致代码难以维护。因此,应谨慎使用友元机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值