朋友的功能

T.T*_*.T. 3 c++ friend

对于朋友功能下的示例
以下是什么?

"请注意,在duplicate()的声明中以及在main()中的后续使用中,我们都没有考虑复制类CRectangle的成员.它不是!它只是访问其私有成员和受保护成员而不是成员. "

在CRectangle的公共部分声明重复.怎么不是成员函数和set_values?

这是一个很好的例子吗?如果没有更好的?

Deu*_*uro 12

Pavel的答案是对你的问题的直接回答,但我想你可能还不清楚朋友的功能用途是什么,所以我想我会给出一个常见的例子.

友元函数的常见用途是使流操作符过载,其中特定操作符需要访问(或通过访问来促进)对象的私有成员.即:

class Rectangle
{
...
    friend ostream &operator<<(ostream &stream, Rectangle r);
private:
    int width;
    int height;
};

friend ostream &operator<<(ostream &stream, Rectangle r)
{
    return (stream << "{" << width << ", " << height << "}");
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,友元函数允许我们访问私有数据进行打印,而无需为数据编写'get'方法.也许这有助于澄清为什么使用友元函数.

  • 一个很好的答案,值得指出的是,`friend operator <<`甚至可以完全定义在`Rectangle`中 - 即,与body一起完成 - 语义保持不变. (4认同)

Pav*_*aev 10

friend在类中声明或定义的任何函数都不是该类的成员.这只是一个朋友的功能.

也就是说,如果在类中定义了友元函数,则可以通过涉及该类的ADL查找找到它(通常用于重载运算符).