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 Klassenich würde sagen:
1. überschrieben
2. überschrieben
3. überladen
4. überladenkann das sein?
Für Hilfe wäre ich dankbarGruss
-
1. geht nicht
2. A::foo ist eine völlig andere Funktion als B::foodaher 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.
Bspclass 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.