Witam, zastanawiałem się ostatnio nad przyjaźniami dla funkcji globalnych, dla klas, lub dla metod danej klasy. Szczególnie zainteresowałem się trzecim przypadkiem, czy programiści używają do szczytnych celów przyjaźni dla metod danej klasy. Nie jestem zaawansowanym programistą C++, a pracuje nad swoją grą, i jest to dla mnie istotne, bo często jest sytuacja, gdy jakaś klasa musi się komunikować w jakimś stopniu z drugą klasą, a czasami nawet metoda jednej klasy z drugą klasą.
To co mnie zawsze mnie zastanawiało:
//pomijam #includy, i inne...
class A;
class B {
public:
void metoda(A& a);
};
class A {
private:
int zmienna;
public:
friend void B::metoda(A& a);
};
void B::metoda(A& a) {
std::cout << a.zmienna;
}
//pomijam main
Czy takie rozwiązanie się opłaca pod względem programowania? Czy wykorzystuje się go tylko w niektórych przypadkach, gdy nie ma innego wyjścia, bo konstrukcja i rozmieszczenie poszczególnych klas, i danych "elementów" na takie rozwiązanie skazuje? Z mojego punktu widzenia, jest lekkie zamieszanie, tzn muszę dopilnować deklaracji zapowiadającej klasy (class A;), i definicji metody (B::metoda)
W końcu, moje kolejne pytanie, czy warto korzystać z przyjaźni? Czy wykorzystuje się go programów, gdy jakaś klasa musi "współpracować" (otrzymać dostęp do elementów) z drugą?
Kieruję te pytanie do bardziej zaawansowanych programistów, jako iż wiele problemów można (tak mi się przyjamniej wydaje) rozwiązać poprzez wskaźniki, a nie przyjaźń. Ja przynajmniej tak robię, a czy to jest dobry "nawyk" (tak jak te a++, czy ++a) to już nie mam zielonego pojęcia. Wiem, że głupio pytać o takie "nawyki", ale uwierzcie mi, że ta rzecz ciekawi mnie już od jakiegoś czasu.
Peace.