Conteúdo do Curso
C++ Poo
C++ Poo
Lista de Inicialização do Construtor
Uma lista de inicialização permite que construtores inicializem membros da classe antes da execução do corpo do construtor. É especialmente útil para inicializações complexas ou ao trabalhar com objetos de classes que possuem membros const
.
Sintaxe da Lista de Inicialização
A sintaxe das listas de inicialização pode parecer excessivamente complexa e confusa. Pode-se considerar utilizar apenas um construtor como uma alternativa mais simples. No entanto, à medida que o programa cresce, as listas de inicialização demonstram ser convenientes e diretas de utilizar.
:
(símbolo de dois-pontos): introduz a lista de inicialização de membros em um construtor;member (value): uma variável membro da classe sendo inicializada com o valor (argumento passado para o construtor);
{ }
(chaves): o corpo do construtor, onde código adicional pode ser executado após a inicialização dos membros.
temperature_sensor.h
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Limitações e Considerações
Existe um equívoco comum em relação à ordem de inicialização na lista de inicialização. Ao contrário do que muitos pensam, a inicialização das variáveis na lista de inicialização não segue a ordem em que são escritas. Em vez disso, ela é determinada pela ordem de declaração dos membros na classe, e não pela sequência na lista de inicialização.
main.cpp
#include <iostream> class Exchanger { public: Exchanger(float _quantity, float _rate) : quantity(_quantity), rate(_rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Tente alterar a ordem de inicialização da variável total
na lista de inicialização e na declaração da variável dentro da class
.
Ao utilizar listas de inicialização em um construtor, o argumento pode ter o mesmo nome que o atributo da class
.
main.cpp
#include <iostream> class Exchanger { public: Exchanger(float quantity, float rate) : quantity(quantity), rate(rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Mas se você usar o mesmo nome tanto para as variáveis membro quanto para os argumentos, o total assumirá o valor dos argumentos multiplicados, não dos membros. Para verificar isso, tente definir quantity como zero em vez do argumento.
1. O que é uma lista de inicialização do construtor?
2. Qual símbolo introduz a lista de inicialização de membros em um construtor?
Obrigado pelo seu feedback!