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âmetrosConstrutores 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.
Desafio
MédioCrie 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 parametersOs 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;
}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
1Fundamentos de OOP
Arquivos ExternosBuild e Compilação em C++Arquivos Header e SourceNamespaces e EscopoIntrodução a OOP em C++Classes vs ObjetosO Ponteiro 'this'Métodos (Funções Membro)Atributos (Membros de Dados)Básico de Ctors e DtorsRecapitulação - Calculadora Simples4Propriedades de Classe
Membros de Instância vs EstáticosGetters e SettersFunções de Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRecapitulação - Gerenciador de Conta Bancária7Herança
Herança BásicaNíveis de Acesso na HerançaOrdem de Chamada de Ctor e DtorSobrescrita de MétodosFunções Virtuais e VTableHerança MúltiplaHerança VirtualRecapitulação - Hierarquia de Funcionários2Gerenciamento de Memória
Memória Stack vs HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Smart Pointers em C++RAII em C++Recapitulação - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de Acesso em C++Especificadores de Acesso em DetalhesOcultação de InformaçãoStruct vs ClassClasses Aninhadas e InternasRecapitulação - Sistema de Registros de Alunos8Polimorfismo
Polimorfismo de Compilação vs Tempo de ExecuçãoSobrecarga de FunçõesFunções Virtuais RevisitadasFunções Virtuais PurasClasses AbstratasDesign de Interfaces em C++Dynamic Casting e RTTIRecapitulação - Calculadora de Formas3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentaçãoListas de Inicialização do ConstrutorConstrutores DelegadosMergulho Profundo em DestrutoresRegra dos Três / Cinco / ZeroRecapitulação - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de StreamSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçãoTemplates de ClasseEspecialização de TemplatesTemplates VariádicosFundamentos de SFINAE e Type TraitsRecapitulação - Container Genérico