Конструкторы и деструкторы С++
Конструкторы
Начальная инициализация объектов класса. Иногда во время создания объекта его элементам необходимо присвоить начальные значения. Как вы уже знаете, сделать это непосредственно в определении класса нельзя. Решить данную проблему можно, написав функцию, которая будет присваивать начальные значения переменным класса, и вызывать эту функцию каждый раз сразу после объявления объекта, что мы благополучно сделали в примере предыдущего раздела урока.
Однако, в языке С++ есть механизм, позволяющий решить эту проблему иным путём. Это - конструкторы.
Конструктор (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
Вывод к примеру - деструкторы вызываются в последовательности, обратной вызову конструкторов.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах