[an error occurred while processing this directive]

Einführung in die Überladung von Funktionsnamen in C++ im Rahmen der Lehre des Programmierens mit der Programmiersprache C++. [] (C++ Überladung von Funktionen, C++ function overloading, C++ function name overloading), Lektion, Seite 721232
http://www.purl.org/stefan_ram/pub/c++_funktionsnamensueberladungen_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Die Überladung von Funktionsnamen in C++

Wenn zwei oder mehr Definitionen für einen Bezeichner im selben Bereich gelten, dann sagt man auch, diese Bezeichner sei überladen. Ein überladener Funktionsname gehört also zu mehreren, verschiedenen Funktionen. Wenn ein überladener Funktionsname auf Argumente angewendet wird, dann wird der Typ der Argumente mit dem Typ der Parameter der Funktionen mit diesem Namen verglichen, um die anzuwendende Funktion zu bestimmen.

Mehrere Funktionen, die eines Gültigkeitsbereichs den gleichen Namen miteinander teilen, müssen sich allerdings in der Zahl oder wenigstens den Typen ihrer Parameter ausreichend unterscheiden.

In dem folgenden Beispiel werden zwei Funktionen mit dem Bezeichner "print" definiert, deren Argument vom Typ "bool" bzw. vom Typ "double" ist.

ueberladung.cpp
#include <iomanip>  // ::std::setprecision 
#include <ios> // ::std::boolalpha 
#include <iostream> // ::std::cout 
#include <ostream> // <<
namespace 
{ void print( const bool wert ) 
{ std::cout << ::std::boolalpha << wert; }
void print( const double wert ) 
{ std::cout << ::std::setprecision( 2 )<< wert; }}
int main() 
{ const bool b( true ); 
const double d( 3.1415926 ); 
print( b ); print( d );  
::std::cout << '\n'; }

std::cout
true3.1

Ohne die Möglichkeit der Funktionsnamensüberladung, müßte man den beiden Funktionen verschiedene Namen geben. Die Namen wären so aber mühevoller zu erlernen und ihre Verschiedenheit wäre unpassend, wenn sie das gleiche  Konzept darstellen, nur für unterschiedliche  Datentypen. Die Funktionsnamensüberladung erlaubt hier eine viel natürlichere Formulierung unter Beibehaltung der Typstrenge, durch die Kontrolle der Verwendung von Ausdrücken anhand ihres Datentyps bei der maschinellen Analyse eines C++ -Programms.

Übungsaufgaben

Erweitern Sie das obige Programmbeispiel um eine Funktion "print" für die Ausgabe eines Wertes des Datentyps "int" und probieren Sie diese durch Aufrufe in der Funktion "main" aus.

Definieren Sie drei Wirkfunktionen "printtype" jeweils für ein Argument vom Datentyp "bool", vom Datentyp "int" und vom Datentyp "double". Jede Wirkfunktion soll den Namen des Datentyps  ihres Argumentes ausgeben.

ueberladung1.cpp
#include <iostream> // ::std::cout 
#include <ostream> // <<
// ... Hier Wirkfunktionen definieren
int main() 
{ printtype( true ); ::std::cout << '\n';  
printtype( 3.1415926 ); ::std::cout << '\n';  
printtype( 0 ); ::std::cout << '\n'; }

std::cout
bool 
double 
int

Erweiterung von Funktionen

Eine Anwendung der Überladung von Funktionsnamen ist die Möglichkeit zur kompatiblen Erweiterung von Funktionsschnittstellen. Eine Funktion mag zunächst beispielsweise zwei Parameter haben. Es kann sich dann aber später herausstellen, daß es hilfreich wäre, einen weiteren Parameter zu der Funktion hinzuzufügen. Dann müßte alle Klienten der Funktion aber entsprechend angepaßt werden, was nicht immer möglich ist.

Dank der Möglichkeit zur Überladung von Funktionsnamen kann dann aber eine weitere Funktion mit gleichem Namen und einem zusätzlichen Parameter definiert werden, ohne daß die bisher schon existierende Funktionsdefinition mit zwei Parametern dazu verändert werden muß. Dann können die bisherigen Klienten weiterhin die bisherige Funktion mit zwei Parametern verwenden, während neuere Klienten die neue Funktion mit drei Parametern verwenden können.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz