Welcher Parameter bei Überladenen Funktionen?
-
Hi,
ich lese gerade ein Buch über C++ und verstehe aber nicht, wie genau es funktioniert, dass der Compiler (oder wer macht das?) entscheidet welche Funktion die richtige ist. Also wie macht er das, das würde mir helfen beim programmieren.Danke im vorraus.
MFG Haldir
-
Hi!
Das entscheidet der Compiler anhand des Typs den du deiner Methode übergibst. Wenn du z.B. folgendes hast:
void ausgeben(double); void ausgeben(long); int main() { ausgeben(1L); ausgeben(1.0); }
Im ersten Aufruf von ausgeben wird ausgeben(long) und im zweiten Aufruf wird ausgeben(double) aufgerufen, da du beim ersten eine Variable vom Typ long und beim zweiten eine Variable vom Typ double übergibst. Er vergleicht also welche Möglichkeiten er hat und wählt dann die benötigte aus.
Code-Hacker
-
Achso, Danke.
Und das wird halt so gemacht, um speicher zu sparen, ja?
-
Haldir schrieb:
das wird halt so gemacht, um speicher zu sparen
Nein.
-
Nein, das spart gar nichts.
Aber vielleicht machen mehrere Funktionen das selbe, nur mit anderen Parametern, also ist es ja sinnvoll, wenn sie gleich heissen und nicht sqrt(), sqrtf(), ...
-
Nein. Wo spart man da bitte speicher? Das Überladen von Funktionen dient
nur dazu, dein Programm übersichtlicher zu gestallten bzw. dir selbst Arbeit zu
ersparen.Beliebtes Beispiel:
struct point { int x,y; }; int doSomeMath(int x, int y) { //... } int doSomeMath(point p) { doSomeMath(p.x, p.y); }
-
Achso, dann bringt das ja garnicht mal soviel.
Man könnte doch definieren, dass diese Funktion nur zb. Float nimmt. Aber ok, jetzt weiss ich bescheid, danke nochmal.
-
Da liegt ein Verständnisproblem vor. Die Funktion sqrt(float) und sqrt(double) haben miteinander nichts zu tun. Das sind zwei völlig unterschiedliche Funktionen. Sie heissen nur zufällig gleich und sofern der Programmierer es will, tun sie auch das gleiche.
-
Ja, ich weiß, man kann sie aber ja auch die gleiche Funktionalität erfüllen lassen.
-
Das tut man in der Regel ja auch. Und weil sie sematisch nahezu das selbe machen,
nennt man sie gleich. Das ist für den Programmierer einfacher. Für den Computer
sind es aber zwei UNTERSCHIEDLICHE Funktionen.