- 有了friend,就没有protected、private了
- 声明即可
- 每个对象指定自己的朋友,被访问者声明
1、友元函数
class Human {
private:
friend void DisplayAge(const Human& person);
string name;
int age;
public:
Human(string humansName, int humansAge) {
name = humansName;
age = humansAge;
}
};
void DisplayAge(const Human& person) { // 没有friend
cout << person.age << endl;
}
int main() {
Human firstMan("Adam", 25);
DisplayAge(firstMan);
return 0;
}
main函数中可以直接通过调用DisplayAge函数去访问Human的私有成员。DisplayAge是一个全局函数
2、友元类
class Human
{
private:
friend class Utility;
string name;
int age;
public:
Human(string humansName, int humansAge)
{
name = humansName;
age = humansAge;
}
};
class Utility
{
public:
static void DisplayAge(const Human& person)
{
cout << person.age << endl;
}
};
int main()
{
Human firstMan("Adam", 25);
Utility::DisplayAge(firstMan);
return 0;
}
声明类是自己的朋友,朋友就可以访问私有成员。
—— 《21天学通C++》