C++ для новичков: Конструкторы, деструкторы, this

Урок посвящен трем важным концепциям C++: конструкторам, деструкторам и ключевому слову this. Разберем их назначение и практическое использование.

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

Конструкторы — специальные методы (функции), автоматически вызываемые при создании объекта класса. Они позволяют инициализировать поля объекта. Для создания конструктора необходимо:

  • Использовать модификатор доступа public. Если конструктор объявлен как private или protected, доступ к нему извне класса запрещен, и создание объектов становится невозможным.
  • Указать имя конструктора, идентичное имени класса.
  • Не указывать тип возвращаемого значения (в отличие от обычных методов).

Пример пустого конструктора для класса Building:

class Building {
public:
    Building() {} // Пустой конструктор
    // ... остальной код класса ...
};

Пустой конструктор ничего не делает, но неявно присутствует в каждом классе. Он вызывается при создании объекта без параметров.

Конструктор может принимать параметры для инициализации полей:

class Building {
public:
    Building(int year, std::string name) : year(year), name(name) {} // Конструктор с параметрами
    // ... остальной код класса ...
private:
    int year;
    std::string name;
};

Этот конструктор принимает год постройки (year) и название (name), устанавливая их значения. Без передачи параметров возникнет ошибка компиляции.

Пример создания объекта с параметрами:

Building school(2000, "School");

Вместо инициализации списка можно использовать метод внутри конструктора:

class Building {
public:
    Building(int year, std::string name) { setData(year, name); }
    void setData(int year, std::string name) { this->year = year; this->name = name; }
    // ... остальной код класса ...
private:
    int year;
    std::string name;
};

Перегрузка конструкторов: Можно создать несколько конструкторов с разным количеством или типом параметров. Компилятор выберет подходящий конструктор в зависимости от переданных параметров.

Пример перегрузки:

class Building {
public:
    Building() {} // Конструктор по умолчанию
    Building(int year, std::string name) { setData(year, name); }
    Building(int year) { this->year = year; std::cout << "Данные установлены" << std::endl; }
    // ... остальной код класса ...
private:
    int year;
    std::string name;
};

Деструкторы

Деструкторы — специальные методы, автоматически вызываемые при уничтожении объекта. Они противоположны конструкторам. Деструктор вызывается, когда объект выходит из области видимости или явно удаляется с помощью delete. В деструкторе обычно размещают код, освобождающий ресурсы (закрытие файлов, подключений к базам данных и т.д.).

Пример деструктора:

class Building {
public:
    ~Building() { std::cout << "Delete object" << std::endl; }
    // ... остальной код класса ...
};

Этот деструктор выводит сообщение «Delete object» при уничтожении объекта.

Указатель this

Ключевое слово this — указатель на текущий объект класса. Оно используется для явного указания на поля или методы текущего объекта, особенно когда имена параметров совпадают с именами полей.

Пример использования this:

class Building {
public:
    Building(int year, std::string name) : year(year), name(name) {} //Конструктор с использованием this
    // ... остальной код класса ...
private:
    int year;
    std::string name;
};

this->year = year; явно указывает, что значение параметра year присваивается полю year текущего объекта. Использование this устраняет неоднозначность и повышает читаемость кода. this используется в конструкторах и методах класса.

Урок рассмотрел конструкторы, деструкторы и ключевое слово this. Понимание этих концепций необходимо для эффективной работы с классами в C++. Конструкторы инициализируют объекты, деструкторы освобождают ресурсы, а this упрощает работу с полями и методами внутри класса.

Что будем искать? Например,программа