Funktionen Überladen
- es ist möglich einen Funktionsnamen mehrmals zu verwenden, wenn die Übergabeparameter nicht gleich sind und damit für den Compiler klar ist, welche Funktion aufgerufen werden soll
int a(int b); int a(double b); int a(char*); int x = a(5); //ist ok, 5 ist int, 5.0 wäre double
- nicht eindeutig ist:
int a(int b); double a(int b); int x = a(5); //welche Funktion nehmen, error
sowie bei Default-Argumenten:
int a(int b, int c = 3); int a(int b); int x = a(5); //welche Funktion nehmen, error
Das Überladen der Funktionen ist möglich durch Name-Mangeling:
Der Compiler hängt an den Funktionsnamen intern ein Kürzel als eindeutige Signatur um zum C-Standard rückwärts kompatibel zu bleiben. Er ersetzt den Code
int f (void) { return 1; } int f (int) { return 0; } void g (void) { int i = f(), j = f(0); }
zu
int __f_v (void) { return 1; } int __f_i (int) { return 0; } void __g_v (void) { int i = __f_v(), j = __f_i(0); }
um eindeutige Funktionsnamen zu erhalten.
Überladen von Operatoren
Der Ausgabe Operator << oder mathematische Operatoren wie+-*/ können für eigene Funktionen implementiert werden um bspw. das eigene Objekt schnicke auszugeben.
Operatoren können nicht von elementaren, bereits definierten Datentypen überladen werden (z.B. char), ur für eigene Klassentypen.
als friend
Class Complex{ double re,im; public Complex(double real, double imag) : re(real), im(imag){}; friend Complex operator+(Complex, Complex); } Complex operator+(Complex c1, Complex c2) { return Complex(c1.re + c2.re, c1.im + c2.im); ) Complex c1(1,2); Complex c2(2,1); Complex c3 = c1 + c2; //ODER Complex c3 = operator+(c1 + c2);
als Klassen Member
Class Complex{ public: double re,im; public Complex(double real, double imag) : re(real), im(imag){}; Complex operator+(Complex c) { return Complex(re + c.re, im + c.im); ) } Complex c1(1,2); Complex c2(2,1); Complex c3 = c1 + c2; //ODER Complex c3 = c1.operator+(c2);
Inhaltsverzeichnis:
Einführung in C++ – Vorteile, Compiler, Namespaces – Teil1
Einführung in C++ – Zeiger, Pointer,Referenzen – Teil2
Einführung in C++ – Datentypen, Casting, Klassen – Teil3
Einführung in C++ – Funktionen und Operatoren überladen (Overloading) – Teil4
Einführung in C++ – Klassen: Vererbung, Adjustment, Friends, abstrakt – Teil5