C++ Konstruktoren: Default-Argumente für flexible Objekterstellung nutzen
Ein Konstruktor ist eine spezielle Memberfunktion einer Klasse, die automatisch aufgerufen wird, wenn ein Objekt erstellt wird. Sie dienen dazu, das Objekt mit Werten oder Standardeinstellungen zu initialisieren.
Default-Argumente in C++ erlauben es, Standardwerte für Funktions- oder Konstruktorparameter festzulegen.
Konstruktor mit Default-Argumenten
Ein Konstruktor mit Default-Argumenten ermöglicht die Erstellung eines Objekts mit optionalen Parametern. Werden Standardwerte für Parameter bereitgestellt, wird der Standardwert verwendet, wenn der Aufrufer keine Werte übergibt.
Syntax
Hier die Syntax für einen Konstruktor mit Default-Argumenten:
class KlassenName { public: KlassenName(Parameter_Typ Parameter_Name = Standard_Wert, Parameter_Typ2 Parameter_Name2 = Standard_Wert2); };
- Der Konstruktor trägt denselben Namen wie die Klasse.
- Standardwerte werden für einen oder mehrere Parameter bereitgestellt.
- Wird kein Wert übergeben, wird der Standardwert verwendet.
Beispiel: Konstruktor mit Default-Argumenten
Hier ein Beispiel für einen Konstruktor mit Default-Argumenten:
#include <iostream> using namespace std; // Funktion mit Default-Argument void printMessage(string message = "Hello, Tutorialspoint Learner") { cout << message << endl; } int main() { // Aufruf ohne Argument printMessage(); // Gibt Standardnachricht aus: "Hello, Tutorialspoint Learner" // Aufruf mit benutzerdefiniertem Argument printMessage("Hi, there!"); // Gibt benutzerdefinierte Nachricht aus: "Hi, there!" return 0; }
Ausgabe
Hello, Tutorialspoint Learner Hi, there!
Erklärung
- Eine Funktion printMessage() wird mit einem Parameter und dem Standardwert "Hello, Tutorialspoint Learner" erstellt.
- In main() wird printMessage() ohne Argument aufgerufen, sodass der Standardwert verwendet wird.
- Bei printMessage("Hi, there!") wird der Wert explizit übergeben und überschreibt den Standardwert.
Konstruktor mit mehreren Default-Argumenten
Ein Konstruktor mit mehreren Default-Argumenten erlaubt Standardwerte für mehr als einen Parameter. Dies bietet mehr Flexibilität und Zugriff auf beliebige Argumentkombinationen.
Beispiel
Hier ein Beispiel für einen Konstruktor mit mehreren Default-Argumenten:
#include <iostream> using namespace std; class Box { public: int length, width, height; // Konstruktor mit mehreren Default-Argumenten Box(int l = 5, int w = 10, int h = 2) { // Standardwerte für Länge, Breite, Höhe length = l; width = w; height = h; } void display() { cout << "Length: " << length << ", Width: " << width << ", Height: " << height << endl; } }; int main() { // Objekte mit unterschiedlicher Argumentanzahl erstellen Box box1; Box box2(15); Box box3(15, 20); Box box4(15, 20, 25); // Objektwerte anzeigen box1.display(); box2.display(); box3.display(); box4.display(); return 0; }
Ausgabe
Length: 5, Width: 10, Height: 2 Length: 15, Width: 10, Height: 2 Length: 15, Width: 20, Height: 2 Length: 15, Width: 20, Height: 25
Erklärung
- Zunächst wird die Klasse Box mit drei öffentlichen Membervariablen definiert: length, width, height. Der Konstruktor Box(int l = 5, int w = 10, int h = 2) hat Default-Argumente für alle drei Parameter.
- Bei Box box1; wird kein Argument übergeben, der Default-Konstruktor wird mit Standardwerten aufgerufen, Ergebnis: "Length: 5, Width: 10, Height: 2".
- Bei Box box2(15); wird length als 15 übergeben, width und height nicht – Standardwerte werden entsprechend verwendet.
- Bei Box box3(15, 20); werden length und width mit 15 und 20 übergeben, Standardwerte werden überschrieben.
Wesentliche Merkmale von Konstruktoren mit Default-Argumenten
Während sie regulären Funktionen ähneln, bieten sie mehr Flexibilität und Komfort bei der Objekterstellung.
1. Standardwerte für Parameter und Flexibilität bei der Objekterstellung
Der Konstruktor kann Standardwerte für einen oder mehrere Parameter haben, die verwendet werden, wenn der Aufrufer kein Argument übergibt, und ermöglicht mehrere Arten der Objekterstellung.
2. Vermeidung mehrerer Konstruktor-Überladungen
Man müsste den Konstruktor für jede Argumentkombination überladen, was den Code aufbläht. Mit Default-Argumenten wird der Konstruktor einmal geschrieben und handhabt verschiedene Fälle automatisch.
3. Reihenfolge der Default-Argumente
Bei mehreren Default-Parametern können Sie keine Default-Argumente in der Mitte überspringen, sobald Sie von rechts anfangen, Defaults bereitzustellen.
Syntax
Box(int l = 1, int w); // Ungültig: 'w' hat keinen Default, aber 'l' hat einen.
4. Default-Argumente können mit const-Membern verwendet werden
Wenn Ihre Klasse const-Member hat, können Default-Argumente im Konstruktor bereitgestellt werden, um die Initialisierung zu erleichtern.
Syntax
class Box { public: const int length, width; Box(int l = 5, int w = 10) : length(l), width(w) {} };
Dieser Konstruktor nutzt Default-Argumente (length = 5, width = 10) zur Initialisierung der const-Member.
C Sprache
- C# ArrayList meistern: Umfassendes Tutorial mit praktischen Beispielen
- C++ Konstruktor-Initialisierungsliste: Warum und wie man sie einsetzt
- C# Interfaces verstehen: Definition, Beispiel und praktische Anwendung
- Bedingte Logik in C# meistern: If, If-Else, If-ElseIf und verschachtelte If-Anweisungen
- C Typecasting: Implizite und explizite Konvertierungen mit Code-Beispielen meistern
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C# Arrays meistern: Deklaration, Initialisierung und Arbeit mit Integer-Sammlungen
- C++-Konstruktoren verstehen: Standard-, Parameter- und Kopierkonstruktor erklärt
- C# Windows Forms Entwicklung: Ein praxisnahes Tutorial
- Dynamische Speicherallokation in C: malloc() verstehen mit praktischen Beispielen