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