C
camper schrieb:
Caipi schrieb:
MartinMilbret schrieb:
Ja stimmt so schon den Überladen heisst ja nichts anderes als unterschiedliche funktionen(in rückgabewerten, Argumentenarten und Anzahl) zuerstellen
Das stimmt so nicht ganz. Der Rückgabewert einer Funktion gehört nicht zu ihrer Signatur, weshalb man keine Funktionen, die sich nur im Rückgabewert unterscheiden, überladen kann.
Beispiel:
int f(double x, double y) { ... }
double f(double x, double y) { ... }
...
int main()
{
...
double z = f(9.9, 18.18); // Fehler - Mehrdeutiger Aufruf!
...
}
Ansonsten ist deine Aussage aber korrekt.
Gruß Caipi
naja, so ganz korrekt ist das nicht. der begriff der signatur ist nicht standardisiert, der typ einer funktion wird bestimmt durch:
- den return typ (bzw. void)
- den typ ihrer parameter
- die cv-qualifikation im falle von memberfunktionen
- die exceptionspezifikation
beim überladen gibt es dann bestimmte regeln, die einschränkend wirken. eine davon ist, dass funktionen, die sich nur im return-typ unterscheiden, nicht überladen werden können.
Jup. Hast Recht. Habe mich undeutlich ausgedrückt. Wollte sagen, dass der Rückgabewert, (der zu der Funktions-Signatur gehört) beim Aufruf einer Funktion nicht ermittelt werden und man desshalb keine Funktionen, die sich nur im Rückgabewert unterscheiden, überladen kann.
das macht dein beispiel illegal, aber nicht erst beim aufruf, bereits die deklaration ist ein fehler (allerdings ist die mehrdeutigkeit, die sich beim aufruf ergäbe, der grund für diese regel).
Auch hier hast du Recht. Habe das im Code (aus Faulheit) nicht deutlicher erwähnt...
Gruß Caipi