Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Список Ініціалізації Конструктора | Конструктори та деструктори
ООП C++

Список Ініціалізації Конструктора

Свайпніть щоб показати меню

Список ініціалізації дозволяє конструкторам ініціалізувати члени класу до виконання тіла конструктора. Особливо корисний для складної ініціалізації або при роботі з об'єктами класів, які мають const-члени.

Синтаксис списку ініціалізації

Синтаксис списків ініціалізації може здаватися надто складним і заплутаним. Можна розглядати використання лише конструктора як простішу альтернативу. Однак із розширенням програми списки ініціалізації виявляються зручними та простими у використанні.

  • : (двокрапка): вводить список ініціалізації членів у конструкторі;

  • member (value): змінна-член класу, яка ініціалізується значенням (аргумент, переданий у конструктор);

  • { } (фігурні дужки): тіло конструктора, де після ініціалізації членів можна виконати додатковий код.

temperature_sensor.h

temperature_sensor.h

1234567
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };

Обмеження та зауваження

Існує поширене хибне уявлення щодо порядку ініціалізації в ініціалізаційному списку. На відміну від загальної думки, ініціалізація змінних у ініціалізаційному списку не відбувається у тому порядку, в якому вони записані. Насправді, порядок визначається порядком оголошення членів у класі, а не послідовністю у ініціалізаційному списку.

main.cpp

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; }
Note
Примітка

Спробуйте змінити порядок ініціалізації змінної total у списку ініціалізації та при оголошенні змінної в межах class.

Під час використання списків ініціалізації в конструкторі ім'я аргументу може збігатися з іменем атрибута у class.

main.cpp

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. Який символ вводить список ініціалізації членів у конструкторі?

question mark

Що таке список ініціалізації конструктора?

Виберіть правильну відповідь

question mark

Який символ вводить список ініціалізації членів у конструкторі?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Список Ініціалізації Конструктора

Список ініціалізації дозволяє конструкторам ініціалізувати члени класу до виконання тіла конструктора. Особливо корисний для складної ініціалізації або при роботі з об'єктами класів, які мають const-члени.

Синтаксис списку ініціалізації

Синтаксис списків ініціалізації може здаватися надто складним і заплутаним. Можна розглядати використання лише конструктора як простішу альтернативу. Однак із розширенням програми списки ініціалізації виявляються зручними та простими у використанні.

  • : (двокрапка): вводить список ініціалізації членів у конструкторі;

  • member (value): змінна-член класу, яка ініціалізується значенням (аргумент, переданий у конструктор);

  • { } (фігурні дужки): тіло конструктора, де після ініціалізації членів можна виконати додатковий код.

temperature_sensor.h

temperature_sensor.h

1234567
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };

Обмеження та зауваження

Існує поширене хибне уявлення щодо порядку ініціалізації в ініціалізаційному списку. На відміну від загальної думки, ініціалізація змінних у ініціалізаційному списку не відбувається у тому порядку, в якому вони записані. Насправді, порядок визначається порядком оголошення членів у класі, а не послідовністю у ініціалізаційному списку.

main.cpp

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; }
Note
Примітка

Спробуйте змінити порядок ініціалізації змінної total у списку ініціалізації та при оголошенні змінної в межах class.

Під час використання списків ініціалізації в конструкторі ім'я аргументу може збігатися з іменем атрибута у class.

main.cpp

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 у нуль замість аргументу.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 3
some-alt