Problem mit Polymorphie und Vererbung



  • Hallo, erstmal, bin ja neu hier 🙂 ich hoffe es kann mir jemand helfen. Ich hab mein Problem mal aufs nötigste reduziert um nicht unnötig zu verwirren, los gehts 😉

    Wir haben Klasse Vogel , Klasse Singvogel und Klasse Raubvogel. Klasse B und C sind von A abgeleitet und haben die Methoden void foo(&Vogel) und &Vogel getMe() geerbt.

    Folgende Situation:
    void Vogel::foo(&Vogel) //standardimplementierung von foo
    {
    *MACH WAS*
    }

    ist es möglich für Singvogel eine überladene Funktion foo() zu deklarieren die so aussieht?

    void Singvogel::foo(&Raubvogel falke)
    {
    *this.foo(falke.getMe());
    /*hier soll die ursprüngliche Version von foo aufgerufen werden, der Gedanke war dass die getMe() Funktion ja einen Vogel zurückliefert und somit hoffentlich die ursprüngliche Funktion foo() aufgerufen würde... */
    }

    ich weiss dass es so einfacher wäre:
    void Singvogel::foo(&Raubvogel falke)
    {
    Vogel::foo(falke.getMe());
    //hier wird die ursprüngliche Version von foo aufgerufen
    }

    die Frage ist nicht wie sinnvoll das alles ist, denn dieses Beispiel vereinfacht den tatsächlichen sachverhalt wie gesagt sehr, bringts aber auf den Punkt.
    Die Frage ist also würde bei der getMe() Funktion ein Vogel zurückgeliefert, so dass nicht die foo(&Raubvogel) sondern die foo(&Vogel) Methode aufgerufen würde?

    Danke im Voraus für die Hilfe 🙂



  • äh.. ich hatte die namen der klasse nachträglich geändert ums verständlicher zu halten.. also nicht wundern wegen dem zeug mit Klasse B,C und A. A ist Vogel, B ist Singvogel, C ist Raubvogel 😉 sorry



  • mach mal die syntax fehler raus. das ist ja grausam.



  • Shino schrieb:

    Die Frage ist also würde bei der getMe() Funktion ein Vogel zurückgeliefert, so dass nicht die foo(&Raubvogel) sondern die foo(&Vogel) Methode aufgerufen würde?

    Ja, sofern ich dich richtig verstanden habe.


Anmelden zum Antworten