Überladen von Funktionen

In C++ ist eine Funktion nicht nur durch ihren Namen, sondern auch durch ihre Parameterliste bestimmt. Diese beiden werden zusammen als ihre Signatur bezeichnet. Es ist in C++ möglich zwei Funktionen gleichen Namens zu deklarieren, wenn sie sich in ihren Parametern unterscheiden - dabei zählen sowohl Anzahl als auch Typen und Reihenfolge. Dieses bezeichnet man als überladen. So kann eine Funktion in zwei Varianten vorliegen, um z.B. in einer Variante zusätzliche Informationen zu bekommen oder um unterschiedliche Datentypen zu verarbeiten. So kann es z.B. sinnvoll sein, mathematische Funktionen in Varianten für Integer- und Gleitkommazahlen zu erstellen:

  int maximum(int a, int b)
  { 
    return (a>b)?a:b ; 
  } 

  double maximum(double a, double b)
  { 
    return (a>b)?a:b ; 
  }

Hierbei unterscheidet sich sogar der Rückgabewert der Funktion, was aber kein Problem darstellt, solange sich die Signatur unterscheidet. Bei unterschiedlicher Signatur kann der Compiler anhand des Namens und der übergebenen Parameter erkennen, welche Variante gemeint ist. Dies funktioniert allerdings nicht, wenn sich die Funktionen nur in dem Rückgabewert unterscheiden, daher ist folgendes nicht erlaubt:

  int fakultät(int n);
  long int fakultät(int n); // gleiche Signatur

Gehen würde, den Parameter im zweiten Fall als long int übergeben zu lassen - wobei das dann für einen Anwender der Funktion irritierend sein könnte.