Menu
Coddy logo textTech

Conceptos básicos de Ctors y Dtors

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 10 de 104.

Un constructor es un método especial que se ejecuta automáticamente cuando se crea un objeto. Un destructor se ejecuta cuando el objeto es destruido.

Constructor por defecto

class Book {
private:
    std::string title;
    int pages;

public:
    Book() {
        this->title = "Unknown";
        this->pages = 0;
    }
};

Constructor parametrizado

Book(std::string title, int pages) {
    this->title = title;
    this->pages = pages;
}

Sobrecarga de constructores — múltiples constructores

class Book {
private:
    std::string title;
    int pages;

public:
    Book() {
        this->title = "Unknown";
        this->pages = 0;
    }
    
    Book(std::string title) {
        this->title = title;
        this->pages = 0;
    }
    
    Book(std::string title, int pages) {
        this->title = title;
        this->pages = pages;
    }
};

Destructor — se ejecuta cuando el objeto es destruido

class Book {
public:
    ~Book() {
        std::cout << "Book destroyed" << std::endl;
    }
};

Creación de objetos con diferentes constructores

Book book1;                        // Constructor por defecto
Book book2("Harry Potter");         // Un parámetro
Book book3("1984", 328);            // Dos parámetros

Los constructores tienen el mismo nombre que la clase sin tipo de retorno. Los destructores usan ~ClassName() y se llaman automáticamente en orden inverso al de creación cuando los objetos salen del alcance.

challenge icon

Desafío

Intermedio

Crea una clase Product con tres constructores sobrecargados y un destructor:

  • Constructor de 3 parámetros: name, price, stock
  • Constructor de 2 parámetros: name, price (stock = 0)
  • Constructor por defecto: name = "Unknown", price = 0, stock = 0
  • Destructor: imprime "Destroying: <name>"

Hoja de referencia

Un constructor es un método especial que se ejecuta automáticamente cuando se crea un objeto. Un destructor se ejecuta cuando el objeto es destruido.

Constructor por defecto — inicializa con valores predeterminados:

class Book {
private:
    std::string title;
    int pages;

public:
    Book() {
        this->title = "Unknown";
        this->pages = 0;
    }
};

Constructor parametrizado — acepta parámetros:

Book(std::string title, int pages) {
    this->title = title;
    this->pages = pages;
}

Sobrecarga de constructores — múltiples constructores con diferentes parámetros:

class Book {
private:
    std::string title;
    int pages;

public:
    Book() {
        this->title = "Unknown";
        this->pages = 0;
    }
    
    Book(std::string title) {
        this->title = title;
        this->pages = 0;
    }
    
    Book(std::string title, int pages) {
        this->title = title;
        this->pages = pages;
    }
};

Destructor — se ejecuta cuando el objeto es destruido, utiliza ~ClassName():

class Book {
public:
    ~Book() {
        std::cout << "Book destroyed" << std::endl;
    }
};

Creación de objetos con diferentes constructores:

Book book1;                        // Constructor por defecto
Book book2("Harry Potter");         // Un parámetro
Book book3("1984", 328);            // Dos parámetros

Los constructores tienen el mismo nombre que la clase y no tienen tipo de retorno. Los destructores se llaman automáticamente en orden inverso a su creación cuando los objetos salen del alcance (scope).

Pruébalo tú mismo

#include <iostream>
#include "Product.h"

int main() {
    std::string name;
    int price, stock;
    std::getline(std::cin, name);
    std::cin >> price >> stock;
    
    Product product1(name, price, stock);
    Product product2("Keyboard", 79);
    Product product3;
    
    std::cout << "Product 1: " << product1.getName() << " - $" << product1.getPrice() << " (Stock: " << product1.getStock() << ")" << std::endl;
    std::cout << "Product 2: " << product2.getName() << " - $" << product2.getPrice() << " (Stock: " << product2.getStock() << ")" << std::endl;
    std::cout << "Product 3: " << product3.getName() << " - $" << product3.getPrice() << " (Stock: " << product3.getStock() << ")" << std::endl;
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos