|
Inhaltsverzeichnis
ÜberladenWarum Überladen?In C wird jedem Identifier (also dem Funktionsnamen) genau eine Funktion zugeordnet. In C++ wird die Signatur zusätzlich zur Identifikation der Funktion verwendet. In Klartext bedeutet das, dass man in C für jede Funktion einen neuen Namen finden muss: void PrintInteger( int i ) { printf( "Integer: %d\n", i ); } void PrintDouble( double d ) { printf( "Double: %f\n", d ); } Wie im Beispiel möchte man allerdings oftmals das gleiche machen, nur eben mit unterschiedlichen Datentypen. Der Zweck der beiden Funktionen ist lediglich etwas auszugeben, dennoch schreibt man den Datentyp dazu, damit der Compiler die Funktionen unterscheiden kann. Funktionen überladenIn C++ können nun die Parameter (nicht der Rückgabeparameter!) zusätzlich zur Unterscheidung hinzugezogen werden. Das führt dazu, dass man sich beim Funktionsnamen auf die eigentlichen Aufgabe konzentrieren kann: void Print( int i ) { printf( "Integer: %d\n", i ); } void Print( double d ) { printf( "Double: %f\n", d ); }
Die Funktion Dabei ist man nicht darauf angewiesen, die gleiche Anzahl von Parametern verwendet. void Print( int i ) { printf( "Integer: %d\n", i ); } void Print( int i, int j ) { printf( "Integer addiert: %d und %d\n", i + j ); } Methoden überladenWie man Funktionen überladen kann, so kann man auch Methoden überladen: class MyInteger { private: int Value; public: Print(); Print( int j ); }; void MyInteger::Print() { printf( "Integer: %d\n", Value ); } void MyInteger::Print( int j ) { printf( "Integer addiert: %d\n", Value + j ); } Default ParameterAufpassen muss man jedoch bei Default-Parametern, dass man keine Funktionen überlädt, die mehrdeutug sind: class MyInteger { private: int Value; public: MyInteger( int value ) : Value( value ) {} Print(); Print( int j = 0 ); }; void MyInteger::Print() { printf( "Integer: %d\n", Value ); } void MyInteger::Print( int j ) { printf( "Integer addiert: %d\n", Value + j ); } int main() { MyInteger myInt; myInt.Print(); return 0; }
In diesem Beispiel ist der Aufruf |