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

Зміст курсу

C++ ООП

C++ ООП

1. Основи ООП у C++
2. Конструктори та Деструктори
3. Огляд Інкапсуляції
4. Огляд Наслідування
5. Огляд Поліморфізму

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

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

course content

Зміст курсу

C++ ООП

C++ ООП

1. Основи ООП у C++
2. Конструктори та Деструктори
3. Огляд Інкапсуляції
4. Огляд Наслідування
5. Огляд Поліморфізму

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
some-alt