Список Ініціалізації Конструктора
Свайпніть щоб показати меню
Список ініціалізації дозволяє конструкторам ініціалізувати члени класу до виконання тіла конструктора. Особливо корисний для складної ініціалізації або при роботі з об'єктами класів, які мають 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. Який символ вводить список ініціалізації членів у конструкторі?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Список Ініціалізації Конструктора
Список ініціалізації дозволяє конструкторам ініціалізувати члени класу до виконання тіла конструктора. Особливо корисний для складної ініціалізації або при роботі з об'єктами класів, які мають 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 у нуль замість аргументу.
Дякуємо за ваш відгук!