Leçons du module (2/2)
Constructeurs et Destructeurs
Les constructeurs et les destructeurs sont des fonctions membres spéciales qui gèrent le cycle de vie des objets : leur création (initialisation) et leur destruction (libération des ressources).
Les Constructeurs
Un constructeur est appelé automatiquement lorsqu'un objet de la classe est créé en mémoire.
- Il a le même nom que la classe.
- Il n'a pas de type de retour (pas même
void). - Il peut être surchargé (overloaded) pour accepter différents ensembles de paramètres.
#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;
}
Constructeur par Défaut
Si vous ne définissez aucun constructeur, le compilateur C++ en génère un par défaut sans paramètres. Cependant, si vous écrivez un constructeur personnalisé avec des paramètres, le constructeur par défaut automatique n'est plus généré, et vous devrez le définir explicitement si vous en avez besoin :
class Point {
public:
int x;
int y;
// Costruttore di default esplicito
Point() {
x = 0;
y = 0;
}
};
Les Destructeurs
Un destructeur est appelé automatiquement lorsque l'objet sort de la portée (scope) ou est explicitement supprimé de la mémoire.
- Il a le même nom que la classe précédé d'un tilde
~(ex.~Item()). - Il n'accepte aucun paramètre et n'a pas de type de retour.
- Il est utilisé pour libérer les ressources occupées (ex. fermer des fichiers, libérer la mémoire allouée dynamiquement).
class ResourceManager {
public:
~ResourceManager() {
// Codice di pulizia
std::cout << "Risorse liberate." << std::endl;
}
};
À vous de jouer
Définissez une classe User avec un membre privé std::string username. Ajoutez un constructeur public qui accepte une chaîne de caractères (User(std::string name)) et l'utilise pour initialiser username. Ajoutez un getter public std::string getUsername() qui renvoie username. Dans le main, créez un User en lui passant 'Alice' comme nom et affichez l'username obtenu à l'aide de std::cout.
Afficher l'indice
Le constructeur a le même nom que la classe et ne spécifie aucun type de retour, pas même `void`.
Solution disponible après 3 tentatives
Définissez une classe Point avec deux membres publics entiers x et y. Ajoutez un constructeur par défaut (sans paramètres) qui initialise x et y à 0. Dans le main, créez un objet Point en utilisant le constructeur par défaut et affichez x et y.
Afficher l'indice
Le constructeur par défaut ne prend pas d'arguments : `Point() { x = 0; y = 0; }`.
Solution disponible après 3 tentatives