C++ Friend函数改进封装?

Mat*_*ent 1 c++ friend

有很多关于C++好友关键字的帖子.我看到有朋友课的好处.关于封面是否被friend关键字破坏,提出并回答了许多问题,但所有这些响应似乎都是针对使用朋友进行课程的.

但朋友的功能怎么样?我不能为我的生活看到你为什么会这样想.一旦你有任何朋友的功能,你是不是允许任何一个类来访问你所有的私人数据/功能?

class Foo
{
private:
    int neverSetToZero;
public:
    Foo() { neverSetToZero = 1; }

    friend void Whateveryoudowiththisdonttouchneversettozero(Foo * t);
};

void Whateveryoudowiththisdonttouchneversettozero(Foo * t)
{
    (*t).neverSetToZero=0;
}

int main()
{
    Foo t;
    Whateveryoudowiththisdonttouchneversettozero(&t);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 6

我会说友元函数只是类的公共接口的扩展,它使用稍微不同的语法并允许对其所有参数进行隐式转换(而成员函数不会对其第一个/隐含参数执行此操作) ).

换句话说,授予友谊的类的作者应该是控制朋友功能的人.如果您只是在类中声明了一个友元函数并允许客户端定义该函数,那么肯定会崩溃(程序崩溃).但这并不是朋友的功能所在.