Geerbte Funktion verändern und weiternutzen?



  • Hallo!

    Folgendes Beispiel:

    Klasse A hat die Funktion Ausgabe() die folgendes ausgibt:

    **
    Hallo du, es ist sitzen <<i<< Vögel auf dem Dach
    **

    Die selbe Funktion will ich in Klasse B nutzen, vererbe sie also, möchte jedoch noch etwas hinzufügen.
    Momentan fällt mir da nur das hier ein

    class B:public A
    {
     public:
     void Ausgabe() const;
    };
    
    void B::Ausgabe() const;
    {
     A::Ausgabe();
     cout<<"Außerdem ist es dunkel!\n";
    };
    

    Habs eben so getippt, ka ob Fehler drinne sind.
    Aber mit dieser Methode kann ich ja nur was anhängen an die bestehende Funktion, was wenn die A::Ausgabe()

    cout<<"Guten Morgen\n";
    cout<<"Guten Abend\n";
    

    bewirkt und ich in class B noch ein Mittag dazwischen klemmen will, geht das ohne sie einfach komplett neu zu überschreiben? 😕 😕 :confused



  • Dazu müsste die Methode ja nur Teilweise ausgeführt weren. Das geht natürlich nicht.



  • Also ist meine Methode praktisch schon die beste möglichkeit die man hat oder gehts auch anders? Fällt das dann unter Polymorphismus bzw. wird dies so genannt?



  • geht das ohne sie einfach komplett neu zu überschreiben?

    Nur in dem du den Code anders strukturierst.

    class A
    {
    public:
        virtual ~A() {}
        void ausgabe()
        {
            prolog();
            epilog();
        }
    protected:
        virtual void prolog() {cout<<"Guten Morgen\n";}
        virtual void epilog() {cout<<"Guten Abend\n"; }
    };
    
    class B : public A
    {
    protected:
        void prolog() {A::prolog(); cout << "Guten Mittag\n";}
    };
    
    int main()
    {
        B b;
        b.ausgabe();
        // Guten Morgen
        // Guten Mittag
        // Guten Abend
    }
    


  • Vielen dank!

    Also ist das schon so in Ordnung wie ich des gemacht habe?
    Und heißt das jetzt Polymorphismus?



  • Polymorphi schrieb:

    Also ist das schon so in Ordnung wie ich des gemacht habe?

    Nein. Vergleiche deinen Code mit dem von Hume

    Und heißt das jetzt Polymorphismus?

    Dein Code hat nix mit Polymorphismus zu tun.

    Lies dir zB mal virtuelle Methoden durch.

    PS: ich bin davon ausgegangen dass Ausgabe() bei dir nicht virtual ist, da du es als solches nicht gekennzeichnet hast. Sollte Ausgabe aber dennoch virtual sein, weil es virtual in A ist - dann ignoriere meinen Beitrag


Anmelden zum Antworten