Список Ініціалізації Конструктора
Список ініціалізації дозволяє конструкторам ініціалізувати члени класу до виконання тіла конструктора. Це особливо корисно для складної ініціалізації або при роботі з об'єктами класів, які мають члени const
.
Синтаксис списку ініціалізації
Синтаксис списків ініціалізації може здаватися надмірно складним і заплутаним. Можна розглядати використання лише конструктора як простішу альтернативу. Однак із розширенням програми списки ініціалізації виявляються зручними та простими у використанні.
-
:
(символ двокрапки): вводить список ініціалізації членів у конструкторі; -
member (value): змінна-член класу, яка ініціалізується значенням (аргумент, переданий у конструктор);
-
{ }
(фігурні дужки): тіло конструктора, де після ініціалізації членів можна виконати додатковий код.
temperature_sensor.h
1234567class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Обмеження та зауваження
Існує поширене хибне уявлення щодо порядку ініціалізації в списку ініціалізації. На відміну від загальної думки, ініціалізація змінних у списку ініціалізації не відбувається у порядку їх запису. Натомість, вона визначається порядком оголошення членів у класі, а не послідовністю у списку ініціалізації.
main.cpp
123456789101112131415#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; }
Спробуйте змінити послідовність ініціалізації змінної total
у списку ініціалізації та при оголошенні змінної в межах class
.
Під час використання списків ініціалізації в конструкторі ім'я аргументу може збігатися з іменем атрибута у class
.
main.cpp
123456789101112131415#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; }
Але якщо ви використовуєте однакові імена для змінних-членів і аргументів, total набуде значення перемножених аргументів, а не членів. Щоб переконатися в цьому, спробуйте встановити quantity у нуль замість аргументу.
1. Що таке список ініціалізації конструктора?
2. Який символ вводить список ініціалізації членів у конструкторі?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.13
Список Ініціалізації Конструктора
Свайпніть щоб показати меню
Список ініціалізації дозволяє конструкторам ініціалізувати члени класу до виконання тіла конструктора. Це особливо корисно для складної ініціалізації або при роботі з об'єктами класів, які мають члени const
.
Синтаксис списку ініціалізації
Синтаксис списків ініціалізації може здаватися надмірно складним і заплутаним. Можна розглядати використання лише конструктора як простішу альтернативу. Однак із розширенням програми списки ініціалізації виявляються зручними та простими у використанні.
-
:
(символ двокрапки): вводить список ініціалізації членів у конструкторі; -
member (value): змінна-член класу, яка ініціалізується значенням (аргумент, переданий у конструктор);
-
{ }
(фігурні дужки): тіло конструктора, де після ініціалізації членів можна виконати додатковий код.
temperature_sensor.h
1234567class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Обмеження та зауваження
Існує поширене хибне уявлення щодо порядку ініціалізації в списку ініціалізації. На відміну від загальної думки, ініціалізація змінних у списку ініціалізації не відбувається у порядку їх запису. Натомість, вона визначається порядком оголошення членів у класі, а не послідовністю у списку ініціалізації.
main.cpp
123456789101112131415#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; }
Спробуйте змінити послідовність ініціалізації змінної total
у списку ініціалізації та при оголошенні змінної в межах class
.
Під час використання списків ініціалізації в конструкторі ім'я аргументу може збігатися з іменем атрибута у class
.
main.cpp
123456789101112131415#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; }
Але якщо ви використовуєте однакові імена для змінних-членів і аргументів, total набуде значення перемножених аргументів, а не членів. Щоб переконатися в цьому, спробуйте встановити quantity у нуль замість аргументу.
1. Що таке список ініціалізації конструктора?
2. Який символ вводить список ініціалізації членів у конструкторі?
Дякуємо за ваш відгук!