lista dwukierunkowa

0

Prosze o rade w zwiazku z nastepujacym problem:
Mam jakas klase podstawowa, np.

class Przeszkoda  

oraz dwie klasy pochodne, dziedziczace klase Przeszkoda:

class Przeszkoda_A : public Przeszkoda  

oraz

class Przeszkoda_B : public Przeszkoda  

Problem jest nastepujacy:
Potrzebuje utworzyc liste dwukierunkowa, ktora bedzie przechowywala elementy obu tych klas pochodnych, Przeszkoda_A i Przeszkoda_B. Czy jest to mozliwe do zrealizowanie i w jaki sposob?

Z gory dziekuje za pomoc.

0
  1. Przechowujesz w liście wskaźniki do Przeszkoda.
  2. Wszystkie metody tych klas robisz wirtualne
  3. Przeszkody muszą mieć wspólny interfejs (te same metody)
0

Ale pole przechowywane w Przeszkoda_A i Przeszkoda_B moga byc rozne? Np. Przeszkoda_A przechowuje w sekscji public typ char i int, a Przeszkoda_B dwa typy float?

Musza miec dokladnie te same metody? Nie moze byc sytuaji gdy np. Przeszkoda_A ma metdoa ZwrocPole a Przeszkoda_B jej nie ma?

0

Pola mogą być różne, o ile nie chcesz się do nich odnosić "ręcznie". Tu musi być pełna enkapsulacja. Wszystkie operacje na wewnętrznym stanie obiektu wykonujesz za pomocą metod. Musisz to sensownie sobie przemyśleć.
Chodzi o to ze będziesz niby miał wskaźnik do Przeszkoda, ale pokazujacy na Przeszkoda_A. Wtedy wywołanie:
wskaznik->metoda();
spowoduje wywołanie metody z klasy Przeszkoda_A. Nie możesz oczywiście próbować w ten sposób wywołać metody której w Przeszkoda nie ma, bo kompilator zaprotestuje.
To jest taktyka stosowana gdy masz obiekty przechowywane w ten sposób i nie wiesz z jakim obiektem konkretnie masz do czynienia. Jest to wygodniejsze niz jakieś if else (bo klas może ci przybywać, a wtedy będziesz musiał w całym kodzie bawić się z dopisywaniem ifów), bo program sam sobie wybiera z której klasy metodę ma wywołac.

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