Witam! Tworzę mały programik. Potrzebuje by dwie moje klasy widziały się nawzajem. W jednej tworzę obiekt drugiej, jako składnik klasy, a w drugiej potrzebuję wywołać metodę z pierwszej? Jak to zrobić?
Żeby jedna mogła być polem drugiej:
- dzielisz wszystko odpowiednio na plik *.h i *.cpp, robisz strażnika nagłówka
- w pierwszej dajesz #inlcude "druga.h"
Żeby z klasy która jest zagregowana w innej klasie wywołać metodę tej klasy nadrzędne? Tak się nie da.
Dlaczego się nie da. Robisz referencje krzyżową przez podanie wskaźników jedna do drugiej. Cos jak circular reference, zobacz jak wygląda boost::waek_ptr to ci wyjaśni. No chyba, ze coś nie tak zrozumiałem. Bo jeśli nie masz referencji bo obiektu to jak wywołasz funkcje jeśli nie jest static?
Pozdrawiam serdecznie
Zrobiłem tak. W nagłówku pierwszej klasy agregacja nagłówka drugiego. W drugiej klasie include nagłówka pierwszej w pliku cpp i przesłanie wskaźnika rodzica(czyli pierwszej klasy), do konstruktora. Mam nadzieję, że zrozumiale to napisałem. Po drodze jeszcze rzutowanie przesłanego wskaźnika, ale mniejsza o to...
Agregacja to relacja między obiektami a nie nagłówkami ;] Jeden obiekt może agregować w sobie kilka innych obiektów ;)
Poza tym nie widzę tu miejsca na żadne rzutowanie. Cóż ty tu musisz rzutować? Masz tu co prawda taką krzyżową referencję, ale to też sie da rozwiązać używając deklaracji zapowiadających:
class B;
class A
{
//
};
//
class A;
class B
{
//
};