Zweck des Überladens
-
Hallo
Es liegt einfach am Komfort. Verstehe nicht, was man da nicht verstehen kann. Im späteren Code kann man sich besser orientieren, ist ja auch klar, anstatt ein paar verschiedene Funktionen aufzurufen, ruft man praktisch "die gleiche" auf.
Mfg.
way
-
way schrieb:
anstatt ein paar verschiedene Funktionen aufzurufen, ruft man praktisch "die gleiche" auf.
Oder versehentlich die falsche.
-
mal abgesehen davon dass Firefighters Beispiel immernoch zwei Überladungen des Konstruktors benutzt (Copy-Ctor und
std::string::string(char const*)), hat das Überladen von Funktionen noch einige andere wichtige Anwendungsbereiche:
- Wenn zwei Funktionen semantisch ein und dasselbe bedeuten macht es Sinn, sie auch gleich zu nennen. Die Funktionen unterscheiden sich dann meistens nur durch den Typ des Parameters, teils aber auch durch die Zahl der Parameter. Ein Beispiel ist die Methode insert() diverser STL-Container, es gibt Überladungen für den value_type, Iteratoren und Iterator-Ranges. Es ist deutlich bequemer einfach zu schreiben vec.insert(5); vec.insert(my_Iter); vec.insert(start_Iter, end_Iter); statt für jede Möglichkeit einen anderen Namen zu nehmen (insert, insertFromIterator, insertFromIteratorRange usw.), zumal schon an den Argumenten zu sehen ist, welche Version benutzt wird.
- Operatoren. Wenn man die nicht überladen könnte müsste man sich für seine Rational-Klasse überlegen ob man andere Rational-Objekte addieren kann oder ints. Beides ginge nicht.
- Templates. Wenn ich irgendwo in einem Template mit templateparameter T eine Funktion foo(t) aufrufe, wo t vom Typ T ist, dann kann der Compiler raussuchen, welche Überladung von foo angemessen ist. Ohne Überladungen würden die meisten Templates ganz einfach nicht funktionieren.
-
Hallo
Oder versehentlich die falsche.
Nein, wie sollte das passieren?
Mfg.
way
-
C++fan 2009 schrieb:
Oder versehentlich die falsche.
Da überladene Funktionen zumindest prinzipiell das Gleiche machen sollten, ist das eher unwahrscheinlich.
-
@pumuckl:D Jo stimmt hast recht
Mist:D
-
way schrieb:
Oder versehentlich die falsche.
Nein, wie sollte das passieren?
Die char Funktion soll aufgerufen werden
void f (int i) { puts ("int"); } void f (char c) { puts ("char"); } int main() { f(9); }
-
Aber du übergibst einen Int, daher wird Int ausgegeben.
-
c++fan 2009 schrieb:
way schrieb:
Oder versehentlich die falsche.
Nein, wie sollte das passieren?
Die char Funktion soll aufgerufen werden
void f (int i) { puts ("int"); } void f (char c) { puts ("char"); } int main() { f(9); }dann sag ihm doch einfach, dass du mit deinem int eigentlich ein char meinst... oder richte nicht so sinnlose Überladungen ein, wenn du es dann auch falsch verwenden willst
-
Hallo zusammen,
vielen Dank für die zahlreichen Antworten. Ich denke, dass ich es verstanden habe und wenn es trotzdem noch Schwierigkeiten damit geben wird, dann melde ich mich wieder!Vielen Dank
lg, freakC++