Wofür sind reine abstrakten Klasse und ist Polymorphismus immer dabei?



  • Hallo an alle,

    kann mir jemand erklären, was für ein Sinn reine abstrakte Klasse haben
    und wann muss man solche Klasse sinnvoll einsetzen.
    Ich habe lange Zeit versucht das nachzuvollziehen, aber vielleicht stehe ich auf dem falschen Weg?

    Und noch eine Frage:
    Ist Polymorpfismus immer bei der reine abstrakten Klasse dabei
    oder nicht 😕

    Vielen Dank im Voraus
    Slawik



  • goldslawik schrieb:

    Hallo an alle,

    kann mir jemand erklären, was für ein Sinn reine abstrakte Klasse haben
    und wann muss man solche Klasse sinnvoll einsetzen.

    http://tutorial.schornboeck.net/pure_virtual.htm
    http://de.wikipedia.org/wiki/Abstrakte_Klasse

    Ich habe lange Zeit versucht das nachzuvollziehen, aber vielleicht stehe ich auf dem falschen Weg?

    wer weiß 😉

    Und noch eine Frage: Ist Polymorpfismus immer bei der reine abstrakten Klasse dabei oder nicht 😕

    Sobald eine Klasse eine virtuelle Methode hat, kannst du Polymorphie anwenden, da Klassen in C++ über "virtual void foo() = 0" Methoden abstrakt werden, hast du auch hier Polymorphie.

    MfG

    GPC



  • goldslawik schrieb:

    kann mir jemand erklären, was für ein Sinn reine abstrakte Klasse haben und wann muss man solche Klasse sinnvoll einsetzen.

    oberbegriffe, zu denen es keine konkreten objekte gibt.

    eine kuh macht muh
    eine katze macht miau
    ein hund macht wau
    ein säugetier macht...
    ups!
    klingt nach
    virtuel sagWas()=0; in der klasse säugetier und säugetier ist abstrakt.
    jom hat auch seine richtigkeit. ich will ja gerne s=new Hund; und s=new Katze; machen aber niemals s=new Säugetier.

    Ist Polymorpfismus immer bei der reine abstrakten Klasse dabei
    oder nicht 😕

    jo, ist immer dabei.



  • Eine abstrakte Klasse bietet nur eine Schnittstelle, über die ein Objekt angesprochen wird (indem sie ein Set an pur virtuellen Methoden definiert), überlässt es aber ihren Kindern, was sie hinter den Kulissen daraus machen (die abgeleitete Klasse muss die pur virtuellen Methoden überschreiben und etwas sinnvolles machen).
    Der Vorteil für den Nutzer ist, daß er zwar weiß, wie er die Klassen ansprechen muß, es ihm aber egal sein kann, wie seine Anfragen behandelt werden.

    @Polymorphie:
    Dabei wird erst zur Laufzeit (aufgrund des dynamischen Typs eines Objekts) festgelegt, welche Implementierung einer Methode aufgerufen wird - d.h. du hast einen Zeiger auf ein Basis-Objekt und je nachdem, wie dieses Objekt erzeugt wurde, wird entweder die Methode von Kind1 oder Kind2 aufgerufen (eventuell auch die Methode aus Basis).

    Polymorphie basiert auf virtuellen Funktionen, allerdings ist es nicht notwendig, daß die Basisklasse abstrakt ist. Umgekehrt führt eine abstrakte Klasse normalerweise dazu, daß polymorphe Strukturen verwendet werden (aber niemand zwingt dich, ein Kind-Objekt über einen Basis* zu verarbeiten).



  • Ist meine folgende Gedanke richtig:
    Mit Hilfe von virtuelle Methoden kann man nur Polymorpfismus realisieren?!



  • goldslawik schrieb:

    Ist meine folgende Gedanke richtig:
    Mit Hilfe von virtuelle Methoden kann man nur Polymorpfismus realisieren?!

    Ja, Polymorphismus realisiert man nur über virtuelle Methoden (in C++).



  • Hallo GPC,

    ich habe vielleicht nicht richtig ausgedrückt:
    Mit Hilfe von virtuelle Methoden kann man nur Polymorpfismus realisieren und SONST NICHTS ANDERES?!



  • Ach so, jetzt (hab mich noch über deinen Satzbau gewundert 😃 ).

    Und ja, mit virtual erzeugt man nur Polymorphie (aber das ist schon eine ganze Menge). Was willst du denn noch als Beilage?

    MfG

    GPC



  • Noch mal Vielen Dank an alle 👍



  • goldslawik schrieb:

    kann mir jemand erklären, was für ein Sinn reine abstrakte Klasse haben und wann muss man solche Klasse sinnvoll einsetzen.
    Ich habe lange Zeit versucht das nachzuvollziehen, aber vielleicht stehe ich auf dem falschen Weg?

    Das habe ich mich auch alles mal gefragt, aber als ich dann Effektiv C++ gelesen hatte und was über Pinguine lernte und anderes, wurde mir genau klar wann und wo ich es einsetzen musste.

    Das war ein tolles Gefühl 😃 😃



  • Freak_Coder schrieb:

    Das habe ich mich auch alles mal gefragt, aber als ich dann Effektiv C++ gelesen hatte und was über Pinguine lernte und anderes, wurde mir genau klar wann und wo ich es einsetzen musste.

    Das war ein tolles Gefühl 😃 😃

    jau! "Effektiv C++ programmieren" ist total der bringer.



  • Kann ich bestätigen. Sehr gutes Lehrbuch. 👍



  • goldslawik schrieb:

    Polymorpfismus !

    ^^ 😃


Anmelden zum Antworten