Lektionen des Moduls (2/2)
Konstruktoren und Destruktoren
Konstruktoren und Destruktoren sind spezielle Elementfunktionen, die den Lebenszyklus von Objekten verwalten: ihre Erstellung (Initialisierung) und ihre Zerstörung (Freigabe von Ressourcen).
Konstruktoren
Ein Konstruktor wird automatisch aufgerufen, wenn ein Objekt der Klasse im Speicher erstellt wird.
- Er hat den gleichen Namen wie die Klasse.
- Er hat keinen Rückgabetyp (nicht einmal
void). - Er kann überladen (overloaded) werden, um verschiedene Parametersätze zu akzeptieren.
#include <iostream>
#include <string>
class Item {
private:
std::string name;
double price;
public:
// Costruttore con parametri
Item(std::string itemName, double itemPrice) {
name = itemName;
price = itemPrice;
std::cout << "Oggetto " << name << " creato." << std::endl;
}
void display() {
std::cout << name << ": " << price << " euro" << std::endl;
}
};
int main() {
// Chiamata implicita al costruttore passando i parametri
Item book("Libro C++", 29.99);
book.display();
return 0;
}
Standardkonstruktor (Default Constructor)
Wenn Sie keinen Konstruktor definieren, generiert der C++-Compiler einen Standardkonstruktor ohne Parameter. Wenn Sie jedoch einen benutzerdefinierten Konstruktor mit Parametern schreiben, wird der automatische Standardkonstruktor nicht mehr generiert, und Sie müssen ihn explizit definieren, falls Sie ihn benötigen:
class Point {
public:
int x;
int y;
// Costruttore di default esplicito
Point() {
x = 0;
y = 0;
}
};
Destruktoren
Ein Destruktor wird automatisch aufgerufen, wenn das Objekt den Gültigkeitsbereich (scope) verlässt oder explizit aus dem Speicher entfernt wird.
- Er hat den gleichen Namen wie die Klasse, vorangestellt mit einer Tilde
~(z. B.~Item()). - Er akzeptiert keine Parameter und hat keinen Rückgabetyp.
- Er wird verwendet, um belegte Ressourcen freizugeben (z. B. Dateien zu schließen, dynamisch zugewiesenen Speicher freizugeben).
class ResourceManager {
public:
~ResourceManager() {
// Codice di pulizia
std::cout << "Risorse liberate." << std::endl;
}
};
Probier es aus
Definiere eine Klasse User mit einem privaten Element std::string username. Füge einen öffentlichen Konstruktor hinzu, der einen String akzeptiert (User(std::string name)) und diesen zur Initialisierung von username verwendet. Füge einen öffentlichen Getter std::string getUsername() hinzu, der username zurückgibt. Erstelle im main einen User mit dem Namen 'Alice' und gib den erhaltenen Benutzernamen mit std::cout aus.
Hinweis anzeigen
Der Konstruktor hat denselben Namen wie die Klasse und gibt keinen Rückgabetyp an, nicht einmal `void`.
Lösung nach 3 Versuchen verfügbar
Definiere eine Klasse Point mit zwei öffentlichen Ganzzahlelementen x und y. Füge einen Standardkonstruktor (ohne Parameter) hinzu, der x und y mit 0 initialisiert. Erstelle im main ein Point-Objekt unter Verwendung des Standardkonstruktors und gib x und y aus.
Hinweis anzeigen
Der Standardkonstruktor nimmt keine Argumente entgegen: `Point() { x = 0; y = 0; }`.
Lösung nach 3 Versuchen verfügbar