朋友和非成员的功能困境

时间:2013-07-27 14:10:52

标签: c++

我搜索了很多关于我无法理解的内容,但我真的没有找到一个关于“朋友”和非成员函数的小困难的正确答案。所以,这是......

这是一个示例代码,其模式类似于我看到的相应代码:

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”关键字标识的非成员类函数类似于不具有的函数?为什么第一个函数(“朋友” ed 函数)不能通过知道“朋友”函数或类可以访问宿主类的私有成员来访问“bar”变量?

1 个答案:

答案 0 :(得分:3)

功能协议需要匹配。变化:

friend void foo1();

要:

friend void foo1(SampleClass& rhs);