wzór projektowy | obiekt1 zawiera wskaźnik na obiekt2, obiekt2 zawiera wskaźnik na obiekt1
Ostatnio zmodyfikowano 2017-02-19 02:15
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;) |
|
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. |
|
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 |
|
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ę. |
|
michal11 |
» 2017-02-19 00:19:20
class Second;
class First { Second * sptr; };
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? |
|
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ę;) |
|
« 1 » |