Конструкторы и деструкторы С++
Конструкторы
Начальная инициализация объектов класса. Иногда во время создания объекта его элементам необходимо присвоить начальные значения. Как вы уже знаете, сделать это непосредственно в определении класса нельзя. Решить данную проблему можно, написав функцию, которая будет присваивать начальные значения переменным класса, и вызывать эту функцию каждый раз сразу после объявления объекта, что мы благополучно сделали в примере предыдущего раздела урока.
Однако, в языке С++ есть механизм, позволяющий решить эту проблему иным путём. Это - конструкторы.
Конструктор (construct - создавать) - это специальная функция-член класса,объявленная с таким же именем, как и класс.
Рассмотрим пример создания конструктора:
# include <iostream>
using namespace std;
class Test{
// так как спецификатор доступа не указан
// данная переменная будет по умолчанию закрыта
// для доступа вне класса (private)
int one;
// спецификатор доступа public
// все члены, идущие после него
// будут открыты для доступа извне
public:
Test(){
one=0;
two=0;
}
// инициализировать переменные в классе
// при создании запрещено, поэтому мы определяем
// метод, реализующий данное действие
void Initial(int o,int t){
one=o;
two=t;
}
// метод показывающий переменные класса
// на экран
void Show(){
cout<<"\n\n"<<one<<"\t"<<two<<"\n\n";
}
int two;
};
void main(){
// создается объект с типом Test
Test obj; //(здесь, в момент создания объекта, сработает конструктор)
// показ на экран
obj.Show(); // 0 0
// вызывается функция, инициализирующая его свойства
obj.Initial(2,5);
// показ на экран
obj.Show(); // 2 5
// прямая запись в открытую переменную two
// с переменной one такая запись невозможна, так
// как доступ к ней закрыт
obj.two=45;
// снова показ на экран
obj.Show(); // 2 45
}
- Конструктор автоматически вызывается при создании объекта, т.е не нужно специально его вызывать.
- Основное назначение конструкторов - инициализация объектов.
- Конструктор всегда должен иметь спецификатор доступа public!!!
C помощью параметров конструктору можно передать любые данные, необходимые для инициализации объектов класса.
Пример. Класс, описывающий точку.
# include <iostream>
using namespace std;
// описание класса Point
class Point {
int x, y;
// координаты точки, по умолчанию имеют
// уровень доступа private
public:
// конструктор присваивает переменным класса x и y начальные
// значения соответственно x0 и y0
Point(int x0, int y0)
{
x = x0;
y = y0;
}
// функция вывода координат точки на экран
void ShowPoint()
{
cout << "\nx = " << x;
cout << "\ny = " << y;
}
};
void main()
{
Point A(1,3); // создаем точку А (объект типа Point)
// с координатами x = 1, y = 3 (вызывается конструктор Point(1, 3)
A.ShowPoint(); // выводим координаты точки А на экран
}
Еще кое-что о конструкторах…
- Конструктор без параметров называют конструктором по умолчанию. Такой конструктор обычно присваивает переменным-членам класса наиболее часто используемые значения.
Point()
{
x = 0;
y = 0;
}
- Для каждого класса может существовать только один конструктор по умолчанию.
- Если для класса не определено никакого конструктора, компилятор создает конструктор по умолчанию. Такой конструктор не задает никаких начальных значений, он просто существует :))).
Деструкторы
Деструктор (destruct - разрушать) выполняет функцию, противоположную функции конструктора.
Деструктор - это специальная функция класса, которая автоматически вызывается при уничтожении объекта - например, когда объект выходит из области видимости. Деструктор может выполнять любые задачи, в момент удаления объекта. Например, если в конструкторе была динамически выделена память, то деструктор должен освободить эту память перед удалением объкта класса.
Основные особенности при работе с деструктором.
- Деструктор не принимает никаких параметров и не возвращает никаких значений.
- Класс может иметь только один деструктор.
Пример последовательности, в которой вызываются конструкторы и деструкторы.
# include <iostream>
using namespace std;
// описание класса CreateAndDestroy
class CreateAndDestroy
{
public:
CreateAndDestroy(int value) // конструктор
{
data = value;
cout << " Object " << data << " constructor\n";
}
~CreateAndDestroy() // деструктор
{
cout << " Object " << data << " destructor\n";
}
private:
int data;
};
void main ()
{
CreateAndDestroy one(1);
CreateAndDestroy two(2);
}
РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ
Object 1 constructor Object 2 constructor Object 2 destructor Object 1 destructor
Вывод к примеру - деструкторы вызываются в последовательности, обратной вызову конструкторов.
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга