Зміст курсу
C++ ООП
C++ ООП
Що таке конструктор класу
Конструктор — це спеціальний метод класу, який викликається під час створення об'єкта. За його допомогою можна ініціалізувати атрибути значущими значеннями.
Використовуючи конструктори, можна спростити створення об'єктів. Без конструктора довелося б встановлювати кожну властивість окремо і, можливо, викликати кілька методів, щоб привести об'єкт у придатний для використання стан.
Основна мета конструктора — ініціалізувати новостворений екземпляр. Він може встановлювати початкові значення атрибутів на основі параметрів, переданих у конструктор, забезпечуючи коректний початковий стан об'єкта.
Синтаксис конструктора
Хоча процес розробки конструктора може здаватися простим, він містить багато специфічних аспектів. Загальний підхід до його створення такий:
student.h
class Student { public: Student() { name = 'Default'; } std::string name; };
Назва: конструктор має таку ж назву, як і сам клас;
Тип, що повертається: конструктори не мають типу, що повертається, навіть
void
;Параметри: конструктори можуть приймати параметри та можуть бути перевантажені з різними наборами параметрів для забезпечення різних способів ініціалізації об'єктів;
Автоматичний виклик: конструктор викликається автоматично компілятором під час створення об'єкта.
Конструктор за замовчуванням
Конструктор за замовчуванням — це конструктор, який може бути викликаний без жодних аргументів. Ось як визначаються та використовуються конструктори за замовчуванням:
main.cpp
#include <iostream> class Example { public: Example() { std::cout << "Object was created!"; } }; int main() { Example obj; }
Ви можете експериментувати з кодом вище. Логіка, написана у методі Example(), виконується кожного разу, коли створюється екземпляр класу.
Спробуйте додати ще один об'єкт або змінити логіку всередині конструктора.
Якщо конструктор не визначено, компілятор генерує типовий. Його поведінка залежить від типів змінних-членів: фундаментальні типи, типи з типовим конструктором або користувацькі типи.
main.cpp
#include <iostream> class Example { public: int value; }; int main() { Example obj; // Default constructor std::cout << obj.value; }
Атрибут є фундаментальним типом даних. Автоматично згенерований типовий конструктор не ініціалізує змінні-члени вбудованих типів. Вони матимуть невизначені значення, якщо створити об'єкт і явно не ініціалізувати ці поля.
Можливо, ви помітите, що компілятор надає послідовне значення для змінної value, але стандарт цього не вимагає, і можливо, що вона міститиме випадкове значення.
Дякуємо за ваш відгук!