wzajemnie zaprzyjaźnione metody w dwóch różnych klasach
Ostatnio zmodyfikowano 2016-09-20 18:29
pozdro600 Temat założony przez niniejszego użytkownika |
wzajemnie zaprzyjaźnione metody w dwóch różnych klasach » 2016-09-20 14:51:34 Czy jest możliwe zrobienie dwóch klas z zaprzyjaźnionymi funkcjami tak, że pierwsza klasa odwołuje się poprzez zaprzyjaźnioną funkcję do elementów drugiej klasy i analogicznie jednocześnie w drugą stronę? Jeżeli jest tylko jedna funkcja zaprzyjaźniona to nie ma problemu, kod się kompiluje i mogę odczytać zmienne z drugiej klasy: #include <iostream> using namespace std;
class Druga;
class Pierwsza { private: int intZPierwszej = 1; public: void wyswietlCosZDrugiej( Druga & obiekt ); };
class Druga { private: int intZDrugiej = 2; public: friend void Pierwsza::wyswietlCosZDrugiej( Druga & obiekt ); };
void Pierwsza::wyswietlCosZDrugiej( Druga & obiekt ) { cout << obiekt.intZDrugiej << endl; }
int main() { Druga dwa; Pierwsza jeden; jeden.wyswietlCosZDrugiej( dwa ); return 0; }
Natomiast jeżeli próbuję zrobić poprzez analogię jak gdyby dwustronny przepływ zmiennych, to kod się już nie kompiluje: #include <iostream> using namespace std;
class Druga;
class Pierwsza { private: int intZPierwszej = 1; public: void wyswietlCosZDrugiej( Druga & obiekt ); friend void Druga::wyswietlCosZPierwszej( Pierwsza & obiekt ); };
class Druga { private: int intZDrugiej = 2; public: friend void Pierwsza::wyswietlCosZDrugiej( Druga & obiekt ); void wyswietlCosZPierwszej( Pierwsza & obiekt ); };
void Pierwsza::wyswietlCosZDrugiej( Druga & obiekt ) { cout << obiekt.intZDrugiej << endl; }
void Druga::wyswietlCosZPierwszej( Pierwsza & obiekt ) { cout << obiekt.intZPierwszej << endl; }
int main() { Druga dwa; Pierwsza jeden; jeden.wyswietlCosZDrugiej( dwa ); dwa.wyswietlCosZPierwszej( jeden ); return 0; }
|
|
carlosmay |
» 2016-09-20 18:29:11 Czy jest możliwe zrobienie dwóch klas z zaprzyjaźnionymi funkcjami tak, że pierwsza klasa odwołuje się poprzez zaprzyjaźnioną funkcję do elementów drugiej klasy i analogicznie jednocześnie w drugą stronę? |
Nie analizowałem kodu. Jeśli potrzebujesz takiego rozwiązania, na pewno jest to błąd projektowy. Da się, ale musisz zagwarantować, że to czego w danej chwili używasz jest już zdefiniowane. |
|
« 1 » |