Перейти к основному содержимому
Модуль 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 username. Добавьте общедоступный конструктор, который принимает строку (User(std::string name)) и использует ее для инициализации имени пользователя. Добавьте общедоступный геттер std::string getUsername(), который возвращает имя пользователя. В основном создайте объект User, указав в качестве имени «Алису», и напечатайте его имя пользователя, используя std::cout.

Загрузка редактора…
Показать подсказку

Конструктор имеет то же имя, что и класс, и не указывает никакого типа возвращаемого значения, даже `void`.

Решение доступно после 3 попыток

Упражнение#cpp.m4.l2.e2
Попыток: 0Загрузка…

Определите класс с именем Point с двумя общедоступными целочисленными членами: x и y. Добавьте конструктор по умолчанию (без параметров), который инициализирует x и y значениями 0. В main создайте объект Point, используя конструктор по умолчанию, и выведите x и y.

Загрузка редактора…
Показать подсказку

Конструктор по умолчанию не принимает аргументов: `Point() { x = 0; у = 0; }`.

Решение доступно после 3 попыток