Direct naar de hoofdinhoud
Module 4 · Les 2 van 210/18 in de cursus~12 min
Modulelessen (2/2)

Constructeurs en Destructeurs

Constructors en destructors zijn speciale lidfuncties die de levenscyclus van objecten beheren: hun creatie (initialisatie) en hun vernietiging (opschonen van hulpbronnen).

Constructeurs

Er wordt automatisch een constructor aangeroepen wanneer een object van de klasse in het geheugen wordt gemaakt.

  • Het heeft dezelfde naam als de klasse.
  • Het heeft geen retourtype (zelfs niet void).
  • Het kan overbelast worden om verschillende sets parameters te accepteren.
C++
#include <iostream>
#include <string>

class Item {
private:
    std::string name;
    double price;

public:
    // Parameterized constructor
    Item(std::string itemName, double itemPrice) {
        name = itemName;
        price = itemPrice;
        std::cout << "Object " << name << " created." << std::endl;
    }

    void display() {
        std::cout << name << ": " << price << " EUR" << std::endl;
    }
};

int main() {
    // Implicit call to the constructor passing parameters
    Item book("Libro C++", 29.99);
    book.display();
    return 0;
}

Standaardconstructeur

Als u geen constructor definieert, genereert de C++-compiler een standaardconstructor zonder parameters. Als u echter een aangepaste constructor met parameters schrijft, genereert de compiler niet langer automatisch de standaardconstructor, dus u zult deze indien nodig expliciet moeten definiëren:

C++
class Point {
public:
    int x;
    int y;

    // Explicit default constructor
    Point() {
        x = 0;
        y = 0;
    }
};

Vernietigers

Er wordt automatisch een destructor aangeroepen wanneer het object buiten bereik valt of expliciet uit het geheugen wordt verwijderd.

  • Het heeft dezelfde naam als de klasse, voorafgegaan door een tilde ~ (bijvoorbeeld ~Item()).
  • Het accepteert geen parameters en heeft geen retourtype.
  • Het wordt gebruikt om bronnen vrij te geven (bijvoorbeeld bestanden sluiten, dynamisch toegewezen geheugen vrijmaken).
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

Probeer het zelf

Oefening#cpp.m4.l2.e1
Pogingen: 0Laden…

Definieer een klasse met de naam User met een privélid std::string gebruikersnaam. Voeg een openbare constructor toe die een tekenreeks accepteert (User(std::string name)) en deze gebruikt om de gebruikersnaam te initialiseren. Voeg een openbare getter std::string getUsername() toe die de gebruikersnaam retourneert. Maak in principe een User-object, waarbij u 'Alice' als naam doorgeeft, en druk de gebruikersnaam af met std::cout.

Editor laden…
Toon hint

De constructor heeft dezelfde naam als de klasse en specificeert geen enkel retourtype, zelfs niet 'void'.

Oplossing beschikbaar na 3 pogingen

Oefening#cpp.m4.l2.e2
Pogingen: 0Laden…

Definieer een klasse met de naam Point met twee openbare gehele leden: x en y. Voeg een standaardconstructor toe (geen parameters) die x en y initialiseert naar 0. Maak in het algemeen een Point-object met behulp van de standaardconstructor en druk x en y af.

Editor laden…
Toon hint

De standaardconstructor accepteert geen argumenten: `Point() { x = 0; y = 0; }`.

Oplossing beschikbaar na 3 pogingen