[Teoria] Przekazywanie informacji obiektowi podrzędnemu w klasie.
Ostatnio zmodyfikowano 2013-01-02 19:00
unimator Temat założony przez niniejszego użytkownika |
[Teoria] Przekazywanie informacji obiektowi podrzędnemu w klasie. » 2013-01-02 16:14:07 Witam!
Ostatnio postanowiłem sobie przepisać pewną grę, którą to kiedyś napisałem, i której to kod wyszedł... ala spaghetti :D. Pytanie jednak nie odnosi się do samej gry tylko do sposobu w jaki mam zrealizować pewną czynność.
Mianowicie, mam główną klasę gry, nazywa się CGame. Wewnątrz niej mam obiekty klas takich jak CMenu, Clevel, CGraphicSystem itd. Nazwę je obiektami podrzędnymi. I tutaj pojawia się "problem". W jaki sposób do tych obiektów podrzędnych przekazać np. wskaźniki do innych obiektów równoległych czy jakieś informację by było to w miarę poprawne. Innymi słowy, czy mogę w konstruktorze obiektów podrzędnych po prostu przekazać obiekt nadrzędny (CGame) i wewnątrz funkcji pobrać potrzebne informację, czy może poprawniej byłoby przekazywać po kolei wskaźniki, zmienne itd. w parametrach konstruktora czy w innej funkcji tego typu? |
|
jsc |
» 2013-01-02 16:17:06 Obiekt nadrzędny można przekazać dzięki słowu kluczowemu this, które używa się zamiast nazwy obiektu. |
|
kubawal |
» 2013-01-02 16:20:15 class CGame;
class CMenu { CGame * parent; public: Cmenu( CGame * p, ) : parent( p ) { } };
class CGame { CMenu menu; CLevel level; public: CGame( ) : menu( this ) , level( this ) , { } };
|
|
unimator Temat założony przez niniejszego użytkownika |
» 2013-01-02 18:55:53 Nie czaicie :D Ja wiem jak to zrobić. Mi chodzi o poprawność takiego działania i kwestie tego, która metoda, A czy B, które przedstawię poniżej, jest ewentualnie lepsza ze względu na ponowne użycie kodu. Przekazanie całego obiektu niejako uniemożliwia mi użycie klasy w innym projekcie bo uzależniłbym ją od konkretnego obiektu nadrzędnego danej klasy (w tym wypadku CMain). Byłaby to jednak łatwiejsza i prostsza metoda. Natomiast jeśli przekażę tylko pola klasy nadrzędnej to klasa stania się praktycznie niezależna. Problemem będzie jednak ewentualna komunikacja z klasą nadrzędną bo nie będzie miała praktycznie jak tego zrobić (wtedy komunikacją w obie strony musiałaby się zająć klasa właśnie ta klasa nadrzędna). I mi chodzi o to, która z tych dwóch metod jest lepsza. class CMain; class CMarginal;
class CMain { private: CMarginal * Marginal; public: CMain(); };
class CMarginal { private: CMain * Main; public: CMarginal( CMain * ); CMarginal( typeA, typeB, typeC...); };
CMarginal::CMarginal( CMain * pMain ) { }
CMarginal::CMarginal( typeA argA, typeB argB, typeC argC...) { }
|
|
jsc |
» 2013-01-02 19:00:39 Sądzę, że pierwsza, bo zmieniasz tylko nazwę jednego obiektu, a nie całe interfejsy. |
|
« 1 » |