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?
0
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;
}