友元(friend)是 C++ 中的一个关键字,用于建立类之间的友好关系;通过友元关系,一个类可以授权其他类或函数访问其私有成员或受保护成员,从而突破了 C++ 中的封装性;友元可以是类或函数,可以出现在类的声明中,也可以出现在类的外部,在声明中,友元关键字表明了某个函数或类是另一个类的友元,从而被授权访问该类的私有或受保护成员。
友元访问权限:
友元关系为双向授权,即如果类 A 是类 B 的友元,但是类 B 不一定是类 A 的友元。 友元关系不具有传递性,即如果类 A 是类 B 的友元,而类 B 又是类 C 的友元,类 C 并不会自动成为类 A 的友元。
友元函数
友元函数是一个不属于任何类的普通函数,但被授权访问一个或多个类的私有或受保护成员。通过友元函数,可以实现对类的封装性的一定程度的突破,允许外部函数直接访问类的私有成员,以执行特定的操作。
class FriendTest
{
public://声明友元函数friend void getPriNum(FriendTest &obj);private:int nPriNum = 200;
};
//定义友元函数
void getPriNum(FriendTest &obj)
{std::cout << "private number:" << obj.nPriNum << std::endl;
}
int main() {FriendTest fritTestObj;//调用友元函数getPriNum(fritTestObj);
system("pause");return 0;
}
在这个例子中,FriendTest
类中有一个私有成员 nPriNum
,而 getPriNum()
函数被声明为 FriendTest
类的友元函数。这意味着 getPriNum
函数可以直接访问 FriendTest
对象的私有成员 nPriNum
。
在 main
函数中,我们创建了一个 FriendTest
对象 fritTestObj
,然后调用了友元函数 getPriNum()
,从而输出了 nPriNum
的值。
友元类
友元类是指一个类可以访问另一个类的私有或受保护成员。通过友元类,一个类可以授权另一个类访问自己的私有或受保护成员,从而实现了类之间的更紧密的合作关系。
class FriendB;
class FriendTest
{
private:int nPriNum = 200;//友元类声明friend class FriendB;
};
class FriendB {
public:void getFriendNumber(FriendTest &obj) {std::cout << "FriendPrivateNumber:"<< obj.nPriNum << std::endl;};
};
int main() {FriendTest friendObj;//getPriNum(friendObj);
FriendB friendBobj;friendBobj.getFriendNumber(friendObj);system("pause");return 0;
}
在这个例子中,FriendTest
是一个包含私有成员 nPriNum
的类。然后,FriendB
类被声明为 FriendTest
的友元类,这意味着 FriendB
类可以访问 FriendTest
类的私有成员。在 FriendB
类的 getFriendNumber
成员函数中,我们可以直接访问 FriendTest
类的私有成员 nPriNum
。在 main
函数中,我们创建了一个 FriendTest
对象 objA
和一个 FriendB
对象 friendBobj
,然后通过 friendBobj
访问并打印了 FriendTest
的私有成员变量 nPriNum
。