Theorie Frage zu Polymporphismus !



  • Hallo,
    hab folgende Frage vor mir liegen:

    Das Polymorphismus-Konzept der Sprache C++ setzt vorraus , dass konkrete Objekte von der Basisklasse abgeleitet werden müssen. Warum ist das so?

    Irgendwie versteh ich die Frage nicht so recht. Kann mal jemand ein C++ Anfänger freundliche Antwort auf die Frage geben?
    Wär Super.

    Grüße NigNag.



  • Polymorphismus gibt es in vielen Formen. Beispielsweise ist '+' Operator polymorph.

    c = a + b;
    

    Weißt du, was hier passiert? Ich nicht. Denn ich kenne die Typen der Variablen nicht. Das ist ein Compile-Zeit-Polymorphismus. Es entscheidet sich zur Compile-Zeit, was '+' jetzt eigentlich überhaupt macht. Es gibt auch Laufzeit-Polymorphismus. Da wird dann halt eben erst zur LAufzeit entscheiden, was jetzt ein Methodenaufruf wirklich macht.

    Dass du diese Idee verstehst ist wichtiger als irgendwelches Wissen über dynamische Bindung.



  • kleines ev. nicht ganz fassendes gleichnis

    stell dir vor, du rufst einen freund an.

    du weißt nicht, was er für ein telefon besitzt. heutzutage haben leute total unterschiedliche modelle, handy mit fernsehen, handy mit kamera, handy mit ladida, festnetztelefon mit fax, ohne fax, oldtimertelefon, ladida...isdn, analog..

    der anrufer weiß das nicht. er sendet jedem dieser telefone den gleichen "ping", sprich: das zeichen: nun klingel mal.

    die telefone besitzen jeder für sich eine eigene idee, wie sie klingeln wollen.

    sowas könnte man machen: eine abstrakte klasse telefon, die eine methode "klingel" besitzt, und: "möchtest du ein telefon sein, musst du von dieser klasse ableiten und klingeln für dich definieren".

    ich sage dann einfach: telefon.klingel(), und das entsprechende telefon (zum bleistift ein handy) klingelt, aber wie es selber will.

    pi mal daumen... ohne großen superkorrektheitsanspruch.. dahingeschrieben 😉



  • aber gut 👍



  • NigNag schrieb:

    Das Polymorphismus-Konzept der Sprache C++ setzt v****** , dass konkrete Objekte von der Basisklasse abgeleitet werden müssen.

    Das ist doch nur bei abstrakten Basisklassen so, oder? Ich kann doch für virtuelle Funktionen eine default implementierung bereitstellen.

    class foo
    {
    public:
        virtual void bar()
        {
            cout << "foo::bar";
        }
    };
    
    foo test;
    test.bar();
    


  • Nochmal: Polymorphie beschränkt sich nicht auf dynamisches Binden von Methoden. Ich finde es wichtig, diese Idee zu verstehen, auch wenn der Fragesteller zugegebenermaßen schon darauf abgezielt hat.



  • Erstma Danke für die Beispiele, die versteh ich soweit auch.

    Aber nochmal zur Frage:
    ....dass konkrete Objekte von der Basisklasse abgeleitet werden müssen!

    Warum müssen diese abgeleitet werden ? Den Polymorphismus an sich hab ich glaub ich schon verstanden, nur irgendwie bereitet mir die Frage Kopfzerbrechen?



  • Ich denke damit ist gemeint, dass es für Polymorphismus mindestens 2 Ebenen in einer Vererbungshierachie bedarf. Sprich, es bedarf min. 1 Basis-Klasse mit dem Verhalten x und einer abgeleiteten Klasse mit dem Verhalten x+delta. Und damit das ganze auch praktisch funktioniert, musst du wenigstens ein Objekt der abgeleiteten Klasse instanziieren. Wenn du dann beispielsweise mit einem Zeiger vom Typ der Basisklasse auf dieses Objekt zeigst und die entsprechende Methode aufrufst, verhält sich das Objekt x+delta.


Log in to reply