Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 友元函数与非成员函数_C++ - Fatal编程技术网

C++ 友元函数与非成员函数

C++ 友元函数与非成员函数,c++,C++,我搜索了很多我不能理解的东西,但是我真的没有找到一个正确的答案来解决我关于“朋友”和非成员函数的一个小难题。所以,这里是 这是一个示例代码,其模式与我看到的各个代码类似: struct SampleClass { friend void foo1(SampleClass &rhs); void foo2(); private: int bar; }; void foo1(SampleClass& rhs) { rhs.foo2(); } voi

我搜索了很多我不能理解的东西,但是我真的没有找到一个正确的答案来解决我关于“朋友”和非成员函数的一个小难题。所以,这里是

这是一个示例代码,其模式与我看到的各个代码类似:

struct SampleClass
{
    friend void foo1(SampleClass &rhs);
    void foo2();
private:
    int bar;
};

void foo1(SampleClass& rhs)
{
    rhs.foo2();
}

void foo3(SampleClass& rhs)
{
    rhs.foo2();
}

int main()
{
    SampleClass samp;
    foo1(samp); //friend function
    foo3(samp); //not a friend function but has the same effect
    return 0;
}

为什么我们使用由“friend”关键字标识的非成员类函数与非成员类函数相似?为什么第一个函数(“friend”函数)不能通过知道“friend”函数或类可以访问宿主类的私有成员来访问“bar”变量?

函数协议需要匹配。更改:

friend void foo1();
致:


@什么意思有同样的影响,void foo2()是一个公共函数…谢谢Joseph。在反复阅读和检查我的代码之后,我终于明白了。问题是,我没有考虑在类之外的非成员类函数和正常函数中访问类的私有成员。那是我不知道的事。我很难理解你的意思<代码>foo2显然是公开的。尝试键入
rhs.bar=5而不是
rhs.foo2()然后您将看到差异。请包含您感到困惑的代码。既然如此,这里似乎没有问题。(
bar
,唯一的
private
东西,永远不会被访问。)
friend void foo1(SampleClass& rhs);