poliformizm, problemy

0

Witam, nie ogarniam poliformizmu zbytnio..

'spraw, aby metoda wypisz stała się metodą polimorficzną, tj. aby polecenie wypisania
w oknie konsoli zawartości wszystkich elementów listy spowodowało wywołanie tej metody
dla każdego z obiektów w formie właściwej dla rzeczywistego typu każdego z obiektów.'

void wypisz(){
	printf("Moc: %d.\n", moc);
	printf("Wymiary: %d.\n\n", wymiary);

}

to jest podstawowa klasa, sa dwie inne, ktore posiadaja rozne dane, nie wiem jak to tknac..

dodatkowo

dodaj do obydwu klas dziedziczących destruktory polimorficzne, których działanie
będzie polegało na wypisaniu w oknie konsoli:
· wartości liczbowej z pola statycznego z klasy bazowej oraz
· nazwy właściwego typu usuwanego obiektu

0

Żeby użyć polimorfizmu potrzebujesz metod wirtualnych (ze słowem kluczowym virtual) oraz wskaźnik/referencję na klasę bazową. Z opisu wnioskuję, że masz mieć jakiś zbiór (listę) takich wskaźników, które poprzez mechanizm polimorfizmu mają wywoływać odpowiednie metody do wypisywania, właściwe dla typu pochodnego, na który wskazuje wskaźnik na klasę bazową.

Czytać zacznij np. tutaj: http://pl.wikibooks.org/wiki/C%2B%2B/Funkcje_wirtualne

0

Masz np

class A
{
   public:

    virtual ~A();

     int moc, wymiary;

     virtual void wypisz()
     {
       printf("Moc: %d.\n", moc);
       printf("Wymiary: %d.\n\n", wymiary);
     }
}

class B : public A
{
    public:

    ~B()
    {
       ...
    }

    int dana;

    void wypisz()
     {
       printf("Dana: %d.\n", dana);
     }
}

Teraz dzięki virtual przy zrobieniu czegoś takiego:

A *ptr_base = new B();

ptr_base->wypisz()

Dostaniemy na ekran wartość dana z klasy B ponieważ bazowa została nadpisana

Wirtualny destruktor zagwarantuje wykonanie kodu ~B(){...}

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