Funktionsüberladung in C++ und die Alternative in C
In dieser Lektion nutzt du die Funktionsüberladung (function overloading) in C++, damit derselbe Funktionsname mit mehreren Datentypen funktioniert, und vergleichst das mit der Vorgehensweise in C.
Einführung
Die Funktionsüberladung (function overloading) erlaubt mehrere Funktionen mit demselben Namen, aber unterschiedlichen Parametertypen. Beim Aufruf wählt der C++-Compiler anhand der Argumenttypen die passende Version aus. C kennt diese Funktion nicht, deshalb braucht jede Funktion einen eigenen Namen.
Wichtige Punkte
- Verstehe zuerst, wie es in C funktioniert, bevor du die Abstraktionen von C++ lernst.
- Drücke den Besitz von Ressourcen mit RAII und Wertsemantik (value semantics) aus.
- Bevorzuge die typsicheren Werkzeuge von C++ gegenüber Makros und Typumwandlungen.
Codebeispiele in C und C++
#include <stdio.h>
int max_int(int left, int right) {
return left > right ? left : right;
}
double max_double(double left, double right) {
return left > right ? left : right;
}
int main(void) {
printf("%d %.1f\n", max_int(3, 8), max_double(4.5, 2.0));
}
8 4.5
#include <iostream>
int maximum(int left, int right) {
return left > right ? left : right;
}
double maximum(double left, double right) {
return left > right ? left : right;
}
int main() {
std::cout << maximum(3, 8) << ' '
<< maximum(4.5, 2.0) << '\n';
}
8 4.5
C und C++ im Vergleich
In C müssen die beiden Funktionen max_int und max_double den Typ im Namen tragen. In C++ heißen beide maximum, und der Compiler wählt anhand des Arguments, int oder double, die richtige Version. Diese Auswahl findet beim Kompilieren statt und macht das Programm deshalb nicht langsamer.
C verwendet Namenskonventionen, Callbacks, Makros und structs mit Kontext.
C++ bietet Abstraktionen mit klarem Gültigkeitsbereich, die typsicher sind und zur Laufzeit meist nichts zusätzlich kosten.
Übungen zur Vertiefung
Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.
- Schreibe den Mechanismus zuerst in C und verwende erst dann die entsprechende C++-Funktion.
- Ersetze das manuelle Freigeben von Ressourcen durch RAII.
- Prüfe, ob die Funktion Speicherreservierungen oder Aufrufe virtueller Funktionen verursacht.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
Alle Challenges