Menu
Coddy logo textTech

Básico de Ctors e Dtors

Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 10 de 104.

Um construtor é um método especial que é executado automaticamente quando um objeto é criado. Um destrutor é executado quando o objeto é destruído.

Construtor padrão

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

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

Construtor parametrizado

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

Sobrecarga de construtores — múltiplos construtores

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;
    }
};

Destrutor — executado quando o objeto é destruído

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

Criando objetos com diferentes construtores

Book book1;                        // Construtor padrão
Book book2("Harry Potter");         // Um parâmetro
Book book3("1984", 328);            // Dois parâmetros

Construtores têm o mesmo nome que a classe, sem tipo de retorno. Destrutores usam ~ClassName() e são chamados automaticamente na ordem inversa da criação quando os objetos saem de escopo.

challenge icon

Desafio

Médio

Crie uma classe Product com três construtores sobrecarregados e um destrutor:

  • Construtor de 3 parâmetros: name, price, stock
  • Construtor de 2 parâmetros: name, price (stock = 0)
  • Construtor padrão: name = "Unknown", price = 0, stock = 0
  • Destrutor: imprime "Destroying: <name>"

Folha de consulta

Um construtor é um método especial que é executado automaticamente quando um objeto é criado. Um destrutor é executado quando o objeto é destruído.

Construtor padrão — inicializa com valores padrão:

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

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

Construtor parametrizado — aceita parâmetros:

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

Sobrecarga de construtor — múltiplos construtores com parâmetros diferentes:

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;
    }
};

Destrutor — executado quando o objeto é destruído, utiliza ~ClassName():

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

Criando objetos com diferentes construtores:

Book book1;                        // Default constructor
Book book2("Harry Potter");         // One parameter
Book book3("1984", 328);            // Two parameters

Os construtores têm o mesmo nome da classe e não possuem tipo de retorno. Os destrutores são chamados automaticamente na ordem inversa da criação quando os objetos saem de escopo.

Experimente você mesmo

#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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos