Einführung in C++ – Funktionen und Operatoren überladen (Overloading) – Teil4


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