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

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

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