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

wzór projektowy | obiekt1 zawiera wskaźnik na obiekt2, obiekt2 zawiera wskaźnik na obiekt1

Ostatnio zmodyfikowano 2017-02-19 02:15
Autor Wiadomość
Nazgul
Temat założony przez niniejszego użytkownika
wzór projektowy | obiekt1 zawiera wskaźnik na obiekt2, obiekt2 zawiera wskaźnik na obiekt1
» 2017-02-18 23:34:02
Dzień dobry,
Szukam sposobu jak zaimplementować dwie klasy obiektów w taki sposób, żeby oba obiekty zawierały wskaźniki na siebie(tak jak w tytule)
Chciałbym to zrobić w taki sposób, żeby metody z obu klas mogły poprzez wskaźnik operować na metodach tej drugiej klasy.
Będę bardzo wdzięczny za wszystkie rady;)
P-157983
czaffik
» 2017-02-18 23:41:25
Rozważ najpierw czy takie coś na pewno ci jest potrzebne bo to trąci błędami projektowymi. Żeby coś takiego uzyskać możesz spróbować dziedziczenia, obie klasy dziedziczą po wspólnej klasie i przechowują wskaźnik do obiektu tej klasy, potem mógłbyś rzutować w górę, a jak inaczej coś takiego rozwiązać to nie mam bladego pojęcia.
P-157984
Nazgul
Temat założony przez niniejszego użytkownika
» 2017-02-18 23:48:19
Można to zaimplementować inaczej(jak wszystko), ale to byłoby bardzo wygodne;)
no właśnie pomysł z tą trzecią klasą, też miałem taki pomysł.. zaśmieca, ale no skoro nie można inaczej..;D
P-157986
czaffik
» 2017-02-18 23:57:55
może i można inaczej, ale naprawdę ciężko sobie wyobrazić jak! jak będziesz próbował wprost do do klasy a będziesz musiał załączyć plik .h z klasą b i na odwrót, a to spowoduje błąd, może da się to jakoś ominąć (np stosując extern - ale nie wiem jak, dawno tego nie używałem i nie chcę wprowadzać w błąd), tak więc innego pomysłu niestety podać nie mogę.
P-157987
michal11
» 2017-02-19 00:19:20
C/C++
//first.h

class Second;

class First
{
    Second * sptr;
};

C/C++
//second.h

class First;

class Second
{
    First * fptr;
};

Dotychczas uważałem, że taka zależność to oznaka złego zaprojektowania kodu ale okazało się, że to się przydaje i jest używane w dość sporych projektach. Oczywiście jeżeli chcesz robić cokolwiek na obiekcie na który wskazują te wskaźniki to w plikach cpp musisz zaincludowac odpowiednie pliki nagłówkowe. Aha i jeszcze jedno, ja tu użyłem zwykłych pointerów ponieważ uznałem, że są to tzw. not owning pointery, jeżeli natomiast jakoś zarządzać lifetimem tych obiektów to powinieneś skorzystać z shared_pyr i weak_ptr. A najlepiej obejrzyj sobie talk Herba Suttera na ostatnim cppconie o zarzadzaniu pamięcią właśnie żeby to lepiej zrozumieć https://youtu.be/JfmTagWcqoE.

Edit.
Pomysł z klasa bazowa jest bardzo zły bo po pierwsze musiałbyś jakoś ujednolicić interfejs i pewnie przerzucić większość funkcji z twoich klas do klasy rodzica albo castować. Dodatkowo nie zawsze da się dodać jedną klasę bazową np. mamy broń i postać, jaką dałbyś klasę bazową jeżeli postać ma trzymać broń i bron ma wiedzieć kto ja trzyma?
P-157989
Nazgul
Temat założony przez niniejszego użytkownika
» 2017-02-19 02:15:46
Nie zaburza to kompletnie reszty projektu(niespodziewane errory), jest przejrzyste, cieszę się że zwróciliście taką uwagę na 'dobre projektowanie kodu';D
Jesteście super! Bardzo dziękuję;)
P-157999
« 1 »
  Strona 1 z 1