funktionen überladen überschreiben



  • Morgen zusammen, ich habe hier eine Aufgabe und bin etwas verwirrt:
    überladen sind... überschrieben sind...
    1. namensgleiche Elementfunktionen mit derselben Signatur in derselben Klasse
    2. namensgleiche Elementfunktionen mit derselben Signatur in verschiednenen Klassen
    3. namensgleiche Elementfunktionen mit verschiedenen Signaturen in der selben Klasse
    4. namensgleiche Elementfunktionen mit verschiednen Signaturen in verschiednen Klassen

    ich würde sagen:
    1. überschrieben
    2. überschrieben
    3. überladen
    4. überladen

    kann das sein?
    Für Hilfe wäre ich dankbar

    Gruss



  • 1. geht nicht
    2. A::foo ist eine völlig andere Funktion als B::foo ➡ daher weder das eine noch das andere
    3. Überladung
    4. siehe 2.



  • 2 ist überschrieben, 4 ist "überdeckt" (zumindest wenn die Klassen miteinander verwandt sind).



  • CStoll schrieb:

    2 ist überschrieben, 4 ist "überdeckt"

    Du sprichst hier von abgeleiteten Klassen, evtl. in Verbindung mit virtual. Davon steht hier aber kein einziges Wort.



  • schon mal Dank an euch. In der Aufgabe steht nichts von abgeleiteten Klassen, bzw. virtuellen Funktionen. Es müsste sich also aufs Allgemeine beziehen.
    Beim nochmaligen Nachdenken würde ich folgendes sagen:
    1. überschrieben (würde eh nicht gehen)
    2. überschrieben (verschiedene Klassen, anderer Gültigkeitsbereich)
    3. überladen (gleicher Gültigkeitsbereich, verschiedene Signaturen)
    4. überschrieben (verschienen Gültigkeitsbereiche)

    Gruss



  • groovemaster schrieb:

    CStoll schrieb:

    2 ist überschrieben, 4 ist "überdeckt"

    Du sprichst hier von abgeleiteten Klassen, evtl. in Verbindung mit virtual.

    Deswegen auch meine Ergänzung in Klammern 😉

    @Globalist:
    1 ist definitiv ein (Compiler-)Fehler, 2 und 4 sind (bei unabhängigen Klassen) weder Überschreiben noch Überladen (Überschreiben gibt es nur, wenn die Klassen voneinander erben).



  • ok danke,

    kann man allgemein sagen dass Funktionen überladen sind wenn sie den gleichen Namen besitzen und sich in ihrer Signatur unterscheiden und den gleichen Gültigkeitsbereich haben.
    Überschrieben sind sie wenn sie vererbt wurden.
    Mir ist nich ganz klar was es mit dem überschreiben auf sich hat.

    Gruss



  • Globalist schrieb:

    kann man allgemein sagen dass Funktionen überladen sind wenn sie den gleichen Namen besitzen und sich in ihrer Signatur unterscheiden und den gleichen Gültigkeitsbereich haben.

    Ja, kann man so sagen

    Überschrieben sind sie wenn sie vererbt wurden.
    Mir ist nich ganz klar was es mit dem überschreiben auf sich hat.

    Fast - überschrieben bedeutet, daß du die geerbte Methode aus der Basisklasse (mit selber Signatur) neu definierst.



  • jup verstanden, danke für die frühe Hilfe 🙂



  • Globalist schrieb:

    Überschrieben sind sie wenn sie vererbt wurden.

    Fast. Von Überschreiben spricht man vor allem bei virtuellen Funktionen.
    Bsp

    class foo
    {
    public:
        virtual void do_something();
    };
    
    class bar
        : public foo
    {
    public:
        void do_something();
    };
    //...
    foo a;
    bar& b = a;
    a.do_something();
    b.do_something();
    

    bar::do_something überschreibt hier foo::do_something. Demzufolge wird zweimal dieselbe Funktion aufgerufen, nämlich bar::do_something().

    Sind die Funktionen nicht virtuell, dann spricht man von Überdecken. Dh, in der Klasse bar wird die Funktion do_something(), welche durch die Basisklasse hinzugefügt wurde, durch die klasseneigene do_something Funktion überdeckt. In diesem Fall würden die beiden Aufrufe auch nicht dieselbe Funktion aufrufen.


Anmelden zum Antworten