Уроки модуля (2/2)
Конструкторы и деструкторы
Конструкторы и деструкторы — это специальные функции-члены, которые управляют жизненным циклом объектов: их созданием (инициализацией) и уничтожением (очисткой ресурсов).
Конструкторы
Конструктор вызывается автоматически, когда объект класса создается в памяти.
- Он имеет то же имя, что и класс.
- У него нет возвращаемого типа (даже
void). - Его можно перегрузить для приема разных наборов параметров.
#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++ создает конструктор по умолчанию без параметров. Однако если вы напишете собственный конструктор с параметрами, компилятор больше не будет автоматически генерировать конструктор по умолчанию, поэтому при необходимости вам придется определить его явно:
class Point {
public:
int x;
int y;
// Explicit default constructor
Point() {
x = 0;
y = 0;
}
};Деструкторы
Деструктор вызывается автоматически, когда объект выходит за пределы области видимости или явно удаляется из памяти.
- Он имеет то же имя, что и класс, которому предшествует тильда
~(например,~Item()). - Он не принимает параметры и не имеет возвращаемого типа.
- Используется для освобождения ресурсов (например, закрытия файлов, освобождения динамически выделяемой памяти).
class ResourceManager {
public:
~ResourceManager() {
// Cleanup code
std::cout << "Resources released." << std::endl;
}
};Попробуйте сами
Определите класс с именем User с закрытым членом std::string username. Добавьте общедоступный конструктор, который принимает строку (User(std::string name)) и использует ее для инициализации имени пользователя. Добавьте общедоступный геттер std::string getUsername(), который возвращает имя пользователя. В основном создайте объект User, указав в качестве имени «Алису», и напечатайте его имя пользователя, используя std::cout.
Показать подсказку
Конструктор имеет то же имя, что и класс, и не указывает никакого типа возвращаемого значения, даже `void`.
Решение доступно после 3 попыток
Определите класс с именем Point с двумя общедоступными целочисленными членами: x и y. Добавьте конструктор по умолчанию (без параметров), который инициализирует x и y значениями 0. В main создайте объект Point, используя конструктор по умолчанию, и выведите x и y.
Показать подсказку
Конструктор по умолчанию не принимает аргументов: `Point() { x = 0; у = 0; }`.
Решение доступно после 3 попыток