為了讓一個(gè)與類無關(guān)的函數(shù)能訪問類的私有數(shù)據(jù)柱搜,可以讓這個(gè)方法成為類的友元函數(shù)愕鼓。
如何創(chuàng)建友元函數(shù)
在類中所宰,只需在這個(gè)函數(shù)原型前面加上friend關(guān)鍵字悲没,而不需要在定義中加上friend望门。
使用友元函數(shù)
由于友元函數(shù)不是類的成員函數(shù)形娇,因此
- 不能使用點(diǎn)號調(diào)用,而是直接使用函數(shù)即可筹误。
- 定義時(shí)也不需要加上類名和作用域限制符桐早。
class Person
{
private:
std::string mName;
int mAge;
public:
Person();
Person(const std::string & name, int age);
~Person();
// 原型中加上friend定義為友元函數(shù),這樣ostream類可以訪問Person內(nèi)部數(shù)據(jù)
friend std::ostream & operator<<(std::ostream & os, const Person & p);
};
// 友元函數(shù)的定義不需要friend關(guān)鍵字
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;
}