在 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);
C++友元详解与应用
5442

被折叠的 条评论
为什么被折叠?



