Jak sprawić, by dwie klasy widziały sie nawzajem?

0

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ć?

0

Ż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.

0

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

0

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...

0

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
{
  //
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1