Funkcja zaprzyjazniona - czemu w public

0

Witam! Moje pytanie dotyczy sprawy teoretycznej. Jeżeli mamy dwie klasy i w jednej deklaruje jakąś funkcję odnoszącą się do obiektu typu drugiej klasy,
i w drugiej klasie oznajmiam, że jest ta funkcja moim przyjacielem, to czemu ta funkcja w pierwszej klasie może być tylko w public. Natomiast jak wezmę przyjaźń całej klasy to jest to bez różnicy?

2

Bo nie możesz ustawić przyjeciala metodzie, której nie widzisz. Ale jak zaczniesz ją widzieć to się da:

#include <iostream>
using namespace std;

class B;

class A
{
friend class B;
public:
  void publicMethod();
private:
  void privateMethod();
};

class B
{
friend void A::publicMethod();
friend void A::privateMethod();
private:
  void foo();
};

void A::publicMethod()
{
    B b;
    cout << "public ";
    b.foo();
    privateMethod();
}

void A::privateMethod()
{
    B b;
    cout << "private ";
    b.foo();
}

void B::foo()
{
  cout << "foo\n";
}
int main()
{
    A a;
    a.publicMethod();
    return 0;
}

( http://ideone.com/DTZUcs )

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0