-1

私は理解できないことについて多くのことを検索しましたが、「友達」と非メンバー関数について私が持っている小さなジレンマに対する適切な答えが本当に見つかりませんでした. だから、ここにある...

これは、パターンが私が見たそれぞれのコードに似ているサンプル コードです。

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」変数にアクセスできないのはなぜですか?

4

1 に答える 1

3

関数プロトコルが一致する必要があります。変化する:

friend void foo1();

に:

friend void foo1(SampleClass& rhs);
于 2013-07-27T14:13:01.737 に答える