为了让一个与类无关的函数能访问类的私有数据,可以让这个方法成为类的友元函数。
如何创建友元函数
在类中,只需在这个函数原型前面加上friend关键字,而不需要在定义中加上friend。
使用友元函数
由于友元函数不是类的成员函数,因此
- 不能使用点号调用,而是直接使用函数即可。
- 定义时也不需要加上类名和作用域限制符。
class Person
{
private:
std::string mName;
int mAge;
public:
Person();
Person(const std::string & name, int age);
~Person();
// 原型中加上friend定义为友元函数,这样ostream类可以访问Person内部数据
friend std::ostream & operator<<(std::ostream & os, const Person & p);
};
// 友元函数的定义不需要friend关键字
std::ostream & operator<<(std::ostream & os, const Person & p)
{
os << "Name: " << p.mName << ", Age: " << p.mAge;
return os;
}
int main()
{
Person p("david", 19);
std::cout << p << std::endl;
return 0;
}