Lecciones del módulo (2/2)
Constructores y Destructores
Los constructores y destructores son funciones miembro especiales que gestionan el ciclo de vida de los objetos: su creación (inicialización) y su destrucción (liberación de recursos).
Los Constructores
Un constructor se llama automáticamente cuando se crea un objeto de la clase en memoria.
- Tiene el mismo nombre que la clase.
- No tiene tipo de retorno (ni siquiera
void). - Puede sobrecargarse (overloaded) para aceptar diferentes conjuntos de parámetros.
#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;
}
Constructor por Defecto
Si no defines ningún constructor, el compilador de C++ genera uno por defecto sin parámetros. Sin embargo, si escribes un constructor personalizado con parámetros, el constructor por defecto automático ya no se genera, y tendrás que definirlo explícitamente si lo necesitas:
class Point {
public:
int x;
int y;
// Costruttore di default esplicito
Point() {
x = 0;
y = 0;
}
};
Los Destructores
Un destructor se llama automáticamente cuando el objeto sale de su ámbito (scope) o es eliminado explícitamente de la memoria.
- Tiene el mismo nombre de la clase precedido por una tilde
~(ej.~Item()). - No acepta parámetros y no tiene tipo de retorno.
- Se utiliza para liberar los recursos ocupados (ej. cerrar archivos, liberar memoria asignada dinámicamente).
class ResourceManager {
public:
~ResourceManager() {
// Codice di pulizia
std::cout << "Risorse liberate." << std::endl;
}
};
Pruébalo tú mismo
Define una clase User con un miembro privado std::string username. Añade un constructor público que acepte una cadena (User(std::string name)) y la use para inicializar username. Añade un getter público std::string getUsername() que devuelva username. En el main crea un User pasándole 'Alice' como nombre y imprime el username obtenido usando std::cout.
Mostrar pista
El constructor tiene el mismo nombre que la clase y no especifica ningún tipo de retorno, ni siquiera `void`.
Solución disponible después de 3 intentos
Define una clase Point con dos miembros públicos enteros x y y. Añade un constructor por defecto (sin parámetros) que inicialice x y y a 0. En el main crea un objeto Point usando el constructor por defecto y imprime x y y.
Mostrar pista
El constructor por defecto no toma argumentos: `Point() { x = 0; y = 0; }`.
Solución disponible después de 3 intentos