Construtores e listas de inicialização de membros
Inicialize membros de forma clara usando listas de inicialização de membros
Construtores e listas de inicialização de membros é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
O que é um construtor?
Um construtor é um método especial executado quando um objeto é criado. Ele tem o mesmo nome da classe e nenhum tipo de retorno.
class Point {
public:
Point() { // default constructor
x_ = 0;
y_ = 0;
}
private:
int x_, y_;
};Construtores parametrizados
Os construtores podem receber parâmetros, e é possível ter várias sobrecargas.
class Point {
int x_, y_;
public:
Point() : x_(0), y_(0) {}
Point(int x, int y) : x_(x), y_(y) {}
};Listas de inicializadores de membros
A sintaxe : member(value) antes do corpo é uma lista de inicializadores de membros. Os membros são inicializados aqui — não recebem atribuição posteriormente dentro do corpo.
class Person {
std::string name_;
int age_;
public:
Person(std::string n, int a) : name_(std::move(n)), age_(a) {}
};Por que usar listas de inicializadores?
Os membros são construídos exatamente uma vez com o valor correto. Sem a lista, eles são construídos com valores padrão e depois recebem uma atribuição — um desperdício para tipos não triviais.
Ordem de inicialização
Os membros são inicializados na ordem em que são declarados na classe — não na ordem da lista de inicializadores. Mantenha as ordens correspondentes para evitar confusão.
Inicializadores padrão na classe (C++11)
Você pode fornecer valores padrão aos membros diretamente no corpo da classe. Isso é útil quando a maioria dos construtores compartilha os mesmos valores padrão.
class Buffer {
size_t size_ = 0;
char* data_ = nullptr;
public:
Buffer() = default;
Buffer(size_t n) : size_(n), data_(new char[n]) {}
};= default e = delete
Peça ao compilador que forneça ou remova um membro especial:
class Widget {
public:
Widget() = default; // compiler-generated default
Widget(const Widget&) = delete; // disable copy
};Construtores delegadores (C++11)
Um construtor pode chamar outro construtor da mesma classe para compartilhar a lógica de inicialização.
class Box {
int w_, h_, d_;
public:
Box(int w, int h, int d) : w_(w), h_(h), d_(d) {}
Box() : Box(1, 1, 1) {} // delegates to the 3-arg ctor
};Construtores explícitos
Construtores com um único argumento podem ser usados em conversões implícitas. Marque-os como explicit para evitar conversões inesperadas.
class Vector {
public:
explicit Vector(size_t n);
};
Vector v = 10; // ERROR: explicit prevents this
Vector v(10); // OKDestrutores
O destrutor ~ClassName() é executado quando um objeto é destruído. Use-o para liberar recursos (arquivos, soquetes, memória bruta).
A regra dos cinco (prévia)
Se você escrever qualquer uma das funções de membro especiais (destrutor, construtor de cópia, atribuição de cópia, construtor de movimento, atribuição de movimento), pense nas cinco. Esse assunto é abordado no curso de semântica de movimento.
Verificação rápida
O que determina a ordem em que os membros de uma classe são inicializados?
Recapitulação
Use construtores para definir o estado do objeto. Prefira listas de inicializadores de membros a atribuições no corpo. Marque construtores com um único argumento como explicit e use = default / = delete para comunicar sua intenção.
Perguntas Frequentes
A aula “Construtores e listas de inicialização de membros” é grátis?
Sim — o texto completo de “Construtores e listas de inicialização de membros” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Construtores e listas de inicialização de membros”?
Inicialize membros de forma clara usando listas de inicialização de membros Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Construtores e listas de inicialização de membros”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- struct versus class: quando usar cada um
- Variáveis-membro e métodos
- Construtores e listas de inicialização de membros
- O ponteiro this e o encapsulamento