komunikacja miedzy klasami!?

0

Mam small problem:

Jest sobie pewna klasa A i pewna klasa B zdefiniowane gdzies w programie.
Tworze sobie obiekt klasy A. Jedna z metod klasy A tworzy sobie obiekt typu B.
Ten obiekt B ma tez rozne metody i teraz chcialbym aby w jednej z takich metod obiektu klasy B, mozna bylo uzyc pola/zmiennej obiektu A (ktory jest nadrzedny w stosunku B).... moze berdziej do kogos przemawiac bedzie kod:

class A
{
  int zmienna;
  int metoda()
  {
    B obiektB;
    obiektB.met();//to musi miec taka postac... zadnych arg/referencji
    return 0;
  }
};

class B
{
  int met()
  {
     //teraz jak tutaj skorzystac z pola zmienna obiektu klasy A
  }
};

int main (void)
{
  A obiektA;
  A.metoda();
  return0; 
}

Czy tak sie w ogóle da? przeciez klasa B nie wiem ze klasa A bedzie tworzyc sobie obiekt typu B. Pewnie rozwiazaniem problemu byloby zdefiniowanie klasy B wewnatrz klasy A, ale nie o to chodzi. Moze jakies dziedziczenie pomoze? Jesli ktos ma jakis pomysl to chetnie sie zapoznam z jakimkolwiek rozwiazaniem

0

jedyne co mi się nasuwa do rzutowanie, jednak nie jestem w tym zbyt dobry
może ktoś coś skojarzy

<dynamic_cast>
<static_cast>
//było jeszcze jedno ale nie pamiętam
0

Milka: Tak, to zapewne mu pomoze...

Styx: Nie wiem czy to rozwiazanie ci odpowiada, bo musisz przeladowac konstuktor klasy B. Chodzilo ci przeciez tylko o brak argumentow i referencji metody, a nie konstruktora. Oto kod:

class A
{
public:
	int zmienna;
	int metoda();
};

class B
{
	A* pA;
public:
	B(A* p):pA(p){};

	int met();
};

int A::metoda()
{
	B b(this); //<- to chyba w niczym nie przeszkadza ?

	b.met();
	return 0;
}

int B::met()
{
	pA->zmienna = 0;	
	return 0;
}
0

Faktycznie jest to pewne rozwiazanie i dzieki za pomoc (przyda sie na przyszlosc), problem w tym ze w moim przypadku klasa B znajduje sie w LIB'ie i nie mam dostepu do jej "zrodla". Na zewnatrz widze tylko jej metody i tylko w nich moge dokonac zmian (sa to metody wywolywane w okreslonych momentach w programie i moge w nich wstawic cos tam, aby zareagowac na to co sie dzieje) :(. Ale dzieki za to co napisales... moze cos pokombinuje i da sie cos zrobic w ten sposob

0

Klase B masz w libie? a nie przypadkiem A, no bo jak chcesz w metodzie B odwolac sie do zmiennej z A, skoro masz z gory ustalone definicje metod ?

0

no systuacja jest dziwna i nawet dla mnie nie dokonca zrozumiala. Jest po prostu osobny plik (cos jakby szablon), w ktorym wypisane sa metody wywolywane gdy cos sie konkretnego w programie wydarzy, np. gdy zakonczy sie odczytywanie danych z dysku (przykladowo). i jest metoda endRead() wywolywana automatycznie gdy taka sytuacja sie zdarzy. Jest ona pusta i moge do niej cos dopisac, aby w takim momencie np. pojawilo sie jakies okienko... wiem ze dziwne, no i sie to kompiluje i dziala...

0

Za malo informacji, abym cos mogl pomoc, ale na pewno mozna to zrobic.

0

Przyznam się, że wszystko to jest dla mnie trochę zagmatwane. Ale jeśli dobrze to rozumiem i problem leży w tym, że te klasy nie mają wzajemnego dostępu do prywatnych składowych drugiej, to chyba zdecydowanie najprościej będzie uczynić te klasy wzajemnie wobec siebie zaprzyjaźnionymi (friends). Uniknie się też brutalnej ingerencji w postaci przerzucania wszystkiego do sekcji public.
Jakby co, to można wspomóc się również deklaracją zapowiadającą. Łapiesz, Styx?

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