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
nomeeidade. - 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
- Declaramos a classe
Pessoacom os membros privadosnome_eidade_. - O construtor recebe
nomeeidadee usa a lista de inicialização: nome_(nome), idade_(idade)para inicializar os membros diretamente. - O destrutor
~Pessoa()é chamado automaticamente quando o objeto sai de escopo; ele imprime uma mensagem. - No
main, criamosPessoa p("Ana", 30), que chama o construtor. - Chamamos
p.mostrar()para exibir os dados. - 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 simvoid ~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