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