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.
#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:
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).
class ResourceManager {
public:
~ResourceManager() {
// Cleanup code
std::cout << "Resources released." << std::endl;
}
};Probeer het zelf
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.
Toon hint
De constructor heeft dezelfde naam als de klasse en specificeert geen enkel retourtype, zelfs niet 'void'.
Oplossing beschikbaar na 3 pogingen
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.
Toon hint
De standaardconstructor accepteert geen argumenten: `Point() { x = 0; y = 0; }`.
Oplossing beschikbaar na 3 pogingen