Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

wzajemnie zaprzyjaźnione metody w dwóch różnych klasach

Ostatnio zmodyfikowano 2016-09-20 18:29
Autor Wiadomość
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:
C/C++
#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:
C/C++
#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;
}
P-151873
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.
P-151874
« 1 »
  Strona 1 z 1