Direkt zum Hauptinhalt springen
eLearner.app
Modul 4 · Lektion 2 von 210/18 im Kurs~12 min
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.
Code
#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:

Code
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).
Code
class ResourceManager {
public:
    ~ResourceManager() {
        // Codice di pulizia
        std::cout << "Risorse liberate." << std::endl;
    }
};

Probier es aus

Übung#cpp.m4.l2.e1
Versuche: 0Wird geladen…

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.

Editor wird geladen…
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

Übung#cpp.m4.l2.e2
Versuche: 0Wird geladen…

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.

Editor wird geladen…
Hinweis anzeigen

Der Standardkonstruktor nimmt keine Argumente entgegen: `Point() { x = 0; y = 0; }`.

Lösung nach 3 Versuchen verfügbar