Przyjaźń dla metody - Czy to się w ogóle opłaca?

0

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.

2

Samego zaprzyjaźnienia radzę unikać, przecież prawie zawsze da się to załatwić w sposób prostszy.

2

Odpowiedź na twoje pytanie:

0

O. @Satirev , wielkie dzięki za wyodrębnienie tej części. Będę musiał częściej przeglądać ich konferencje, bo wyjaśniają wiele mankamentów związanych z C++.
Co do samego wątku, to chciałbym dodać, że osobiście rzadko kiedy widze friendy. We wszelakich programach raczej tego się nie używa. Ale to nie jest przypadkiem dobre narzędzie do zaciemnienia kodu? Przecież takimi friendami można udostępnić każdy element każdemu elementowi (Wiem, że to kiepski pomysł.), i znieść limity słówek private i protected

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