Перейти до основного вмісту
Модуль 4 · Урок 2 із 210/18 у курсі~12 min
Модульні уроки (2/2)

Конструктори та деструктори

Конструктори та деструктори — це спеціальні функції-члени, які керують життєвим циклом об’єктів: їх створенням (ініціалізацією) та їх знищенням (очищення ресурсу).

Конструктори

Конструктор викликається автоматично, коли об’єкт класу створюється в пам’яті.

  • Він має те саме ім’я, що й клас.
  • Він не має типу повернення (навіть void).
  • Він може бути перевантажений для прийняття різних наборів параметрів.
C++
#include <iostream>
#include <string>

class Item {
private:
    std::string name;
    double price;

public:
    // Parameterized constructor
    Item(std::string itemName, double itemPrice) {
        name = itemName;
        price = itemPrice;
        std::cout << "Object " << name << " created." << std::endl;
    }

    void display() {
        std::cout << name << ": " << price << " EUR" << std::endl;
    }
};

int main() {
    // Implicit call to the constructor passing parameters
    Item book("Libro C++", 29.99);
    book.display();
    return 0;
}

Конструктор за замовчуванням

Якщо ви не визначаєте жодного конструктора, компілятор C++ генерує конструктор за замовчуванням без параметрів. Однак, якщо ви пишете власний конструктор із параметрами, компілятор більше не генерує конструктор за замовчуванням автоматично, тому вам потрібно буде визначити його явно, якщо це необхідно:

C++
class Point {
public:
    int x;
    int y;

    // Explicit default constructor
    Point() {
        x = 0;
        y = 0;
    }
};

Деструктори

Деструктор викликається автоматично, коли об’єкт виходить за межі видимості або явно видаляється з пам’яті.

  • Він має те саме ім’я, що й клас, якому передує тильда ~ (наприклад, ~Item()).
  • Він не приймає параметрів і не має типу повернення.
  • Використовується для звільнення ресурсів (наприклад, закриття файлів, звільнення динамічно виділеної пам’яті).
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

Спробуйте самі

вправи#cpp.m4.l2.e1
Спроби: 0Завантаження…

Визначте клас під назвою User із приватним членом std::string ім’я користувача. Додайте публічний конструктор, який приймає рядок (User(std::string name)) і використовує його для ініціалізації імені користувача. Додайте загальнодоступний засіб отримання std::string getUsername(), який повертає ім’я користувача. У головному створіть об’єкт користувача, передавши «Alice» як ім’я, і надрукуйте його ім’я користувача за допомогою std::cout.

Завантаження редактора…
Показати підказку

Конструктор має те саме ім’я, що й клас, і не вказує тип повернення, навіть `void`.

Рішення доступне після 3 спроб

вправи#cpp.m4.l2.e2
Спроби: 0Завантаження…

Визначте клас під назвою Point із двома відкритими цілими членами: x і y. Додайте конструктор за замовчуванням (без параметрів), який ініціалізує x і y рівними 0. У main створіть об’єкт Point за допомогою конструктора за замовчуванням і виведіть x і y.

Завантаження редактора…
Показати підказку

Конструктор за замовчуванням не приймає аргументів: `Point() { x = 0; y = 0; }`.

Рішення доступне після 3 спроб