Fácil C++

Construtor e destrutor simples

Enunciado

Crie uma classe Pessoa com os atributos nome (string) e idade (int). Implemente um construtor que recebe esses valores usando lista de inicialização e um destrutor que imprime uma mensagem. No main, crie um objeto e mostre seus dados.

Requisitos

  • A classe deve ter um construtor com parâmetros nome e idade.
  • O construtor deve usar lista de inicialização.
  • O destrutor deve imprimir "Destruindo " seguido do nome.
  • O programa deve exibir nome e idade do objeto.

Código inicial

#include <iostream>
#include <string>

class Pessoa {
public:
    // TODO: construtor com lista de inicialização
    // TODO: destrutor
    void mostrar() const {
        std::cout << nome_ << " tem " << idade_ << " anos\n";
    }
private:
    std::string nome_;
    int idade_;
};

int main() {
    // TODO: criar objeto e chamar mostrar()
    return 0;
}

Saída esperada

Ana tem 30 anos
Destruindo Ana
Ver dica

A lista de inicialização fica entre : e {} do construtor. Exemplo: Pessoa(std::string n, int i) : nome_(n), idade_(i) {}.

Mostrar solução
#include <iostream>
#include <string>

class Pessoa {
public:
    // Construtor com lista de inicialização
    Pessoa(const std::string& nome, int idade)
        : nome_(nome), idade_(idade) {}

    // Destrutor
    ~Pessoa() {
        std::cout << "Destruindo " << nome_ << "\n";
    }

    void mostrar() const {
        std::cout << nome_ << " tem " << idade_ << " anos\n";
    }

private:
    std::string nome_;
    int idade_;
};

int main() {
    Pessoa p("Ana", 30);
    p.mostrar();
    return 0;
}

Passo a passo

  1. Declaramos a classe Pessoa com os membros privados nome_ e idade_.
  2. O construtor recebe nome e idade e usa a lista de inicialização : nome_(nome), idade_(idade) para inicializar os membros diretamente.
  3. O destrutor ~Pessoa() é chamado automaticamente quando o objeto sai de escopo; ele imprime uma mensagem.
  4. No main, criamos Pessoa p("Ana", 30), que chama o construtor.
  5. Chamamos p.mostrar() para exibir os dados.
  6. Ao final do main, o destrutor é executado automaticamente.

Por que funciona

A lista de inicialização garante que os membros sejam construídos diretamente com os valores fornecidos, evitando uma etapa extra de atribuição. O destrutor é invocado pelo compilador quando o objeto é destruído, permitindo liberar recursos ou executar ações de limpeza.

Erros comuns

  • Esquecer a lista de inicialização e tentar atribuir dentro do corpo: Pessoa(std::string n, int i) { nome_ = n; idade_ = i; }. Isso funciona, mas não é idiomático e pode ser ineficiente. Prefira a lista.
  • Não declarar o destrutor como ~Pessoa() e sim void ~Pessoa() — erro de compilação.
  • Tentar chamar o destrutor manualmente: p.~Pessoa(); — não faça isso; o destrutor é chamado automaticamente.

Outra forma de resolver

Usar std::string e int diretamente no corpo do construtor, mas a lista de inicialização é preferível.

Saída esperada

Ana tem 30 anos
Destruindo Ana