Czy polimorfizm występuje w przykładzie?

0

Witam. Czy polimorfizm występuje w danym przykładzie kodu?

class a {
protected:
        ...

public: 
    virtual void wypisz() = 0;
};

template <typename T>
class b : public a {
protected:
    ...

public:
        void wypisz() {
              ...
        }
};

class c : public b<char> {
public:
        ...
        nie ma metody wypisz();
        ...
}

int main() {
       c cos_tam;

       cos_tam.wypisz();
}
1

Tak. Jest użyty polimorfizm parametryczny. Szablony. Występować występuje ale nie jest wykorzystywany.

0

Mógłbyś wytłumaczyć na czym to polega? Nie za bardzo rozumiem.

0
niesuszek napisał(a):

Mógłbyś wytłumaczyć na czym to polega? Nie za bardzo rozumiem.

Ale co na czym polega? Polimorfizm czy użycie szablonów w tym przykładzie?

Polimorfizm to tzw. wielopostaciowość obiektu. Możesz używać danych fragmentów programu na wiele różnych sposobów.

Załóżmy, że masz klasę bazową A, która posiada metodę wirtualną:

virtual void wypisz(){
      cout<<"A"<<endl;
}

Następnie z tej klasy dziedziczona jest klasa B, która definiuje metodę wypisz(); w swój sposób:

void wypisz(){
    cout<<"B"<<endl;
}

Metoda wypisz(); z klasy B "przykrywa" metodę wypisz() z klasy A, dzięki temu przy użyciu tej metody wyświetlnoy zostanie tekst, który znajduje się w obu tych metodach. Gdyby w klasie A nie użyto słówka kluczowego virtual, to po wywołaniu metody w taki sposób:

int main(){

    A* a = new A;
    A* b = new B;
    a->wypisz();
    b->wypisz();
} 

wynikiem byłyby dwie litery A. Jednak dzięki użytemu polimorfizmowi kolejno wyświetlane są A i B.

W polimorfizmie parametrycznym, chodzi o to, ze typy danych użytych na danym obiekcie. Fragmentom programu zostają nadane (lub nie nadane) typy, na których mają operować.
Ogólnie pojęcie szablonów jest tutaj: http://www.cplusplus.com/doc/tutorial/templates/
Natomiast polimorfizm oraz polimorfizm parametryczny tu: http://en.wikipedia.org/wiki/[...]mming#Parametric_Polymorphism

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