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

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

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

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

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

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

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

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

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

temperature_sensor.h

temperature_sensor.h

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

Обмеження та особливості

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

main.cpp

main.cpp

copy
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

copy
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

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

Select the correct answer

question mark

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

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

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