2013-10-08 33 views
3

我用C学习有关friend关键字++,我很奇怪,为什么有一个非成员函数,并使用friend关键字时,你可以让非成员函数的成员函数?我希望我明确提出了我的问题,谢谢!为什么要使用非成员函数?

+0

我能想到的一个常见示例是重载'ostream'运算符。 – 2013-10-08 22:45:32

+1

http://www.gotw.ca/gotw/084.htm –

+0

@JerryCoffin:这是一个很好的参考,但公平地说,Sutter主要是在谈论非朋友不成员,而问题是关于_friend_非 - 成员。 –

回答

8

因为有时候你需要创建一个重载的操作在您的类类型是在右手边。这必须作为一项免费功能来实施。经典示例:

ostream& operator<<(ostream& str, my_type const& my) 
{ 
    // print out `my` into `str`---requires `friend` if using 
    // private members of `my_type` 
    return str; 
} 
+1

为了说清楚,成员函数总是有自己的对象类型作为第一个参数,但对于cout << ,您希望cout(ostream)作为第一个参数。所以这不能作为一个成员函数来实现。同样适用于重载运算+,使得6个+ OBJ作品。这里6是第一个不属于类的参数。 – fayyazkl

相关问题