
- •1 Вопрос: Поняття алгоритму. Властивості алгоритму. Способи описування алгоритмів
- •40 Вопрос
- •Создание простого конструктора
- •Представление о деструкторе
- •Что вам необходимо знать
- •41 Вопрос: ------
- •42 Вопрос: Урок 26. Наследование
- •Простое наследование
- •43 Вопрос 44 вопрос:
- •Дружні функції
- •46 Вопрос:
- •Первое знакомство с перегрузкой функций
- •Когда необходима перегрузка
- •Что вам необходимо знать
- •Создание простого шаблона функции
- •Шаблоны, которые используют несколько типов
- •Что вам необходимо знать
- •Шаблоны классов
- •16.1. Определение шаблона класса
- •50 Вопрос:
- •Класс cFile
- •Структуры
- •Класифікація мов програмування
- •Типы переменных. Объявление переменных. Константы. Присваивание. Арифметические операции. Инкремент и декремент.
Представление о деструкторе
Деструктор автоматически запускается каждый раз, когда программа уничтожает объект. В следующих уроках вы узнаете, как создать списки объектов, которые увеличиваются или уменьшаются по мере выполнения программы. Чтобы создать такие динамические списки, ваша программа для хранения объектов распределяет память динамически (что вы еще не научились делать). К настоящему моменту вы можете создавать и уничтожать объекты в процессе выполнения программы. В таких случаях имеет смысл применение деструкторов.
Каждая из созданных вами до сих пор программ создавала объекты в самом начале своего выполнения, просто объявляя их. При завершении программ C++ уничтожал объекты. Если вы определяете деструктор внутри своей программы, C++ будет автоматически вызывать деструктор для каждого объекта, когда программа завершается (т.е. когда объекты уничтожаются). Подобно конструктору, деструктор имеет такое же имя, как и класс объекта. Однако в случае деструктора вы предваряете его имя символом тильды (~), как показано ниже:
~class_name (void) //----------->указывает деструктор
{ // Операторы деструктора }
В отличие от конструктора вы не можете передавать параметры деструктору. Следующая программа DESTRUCT.CPP определяет деструктор для класса employee:
void employee::-employee(void)
{ cout << "Уничтожение объекта для " << name << endl; }
В данном случае деструктор просто выводит на ваш экран сообщение о том, что C++ уничтожает объект. Когда программа завершается, C++ автоматически вызывает деструктор для каждого объекта. Ниже приведена реализация программы DESTRUCT.CPP:
#include <iostream.h>
#include <string.h>
class employee
{ public: employee(char *, long, float); ~employee(void); void show_employee(void); int change_salary(float); long get_id(void); private: char name [64] ; long employee_id; float salary; };
employee::employee(char *name, long employee_id, float salary)
{ strcpy(employee::name, name) ; employee::employee_id = employee_id; if (salary < 50000.0) employee::salary = salary; else // Недопустимыйоклад employee::salary в 0.0; }
void employee::-employee(void)
{ cout<< "Уничтожениеобъектадля " << name << endl; }
void employee::show_employee(void)
{ cout<< "Служащий: " << name << endl; cout << "Номерслужащего: " << employee_id << endl; cout << "Оклад: " << salary << endl; }
void main(void)
{ employee worker("Happy Jamsa", 101, 10101.0); worker.show_employee(); }
Если вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:
С:\> DESTRUCT <ENTER>
Служащий: Happy Jamsa
Номер служащего: 101
Оклад: 10101
Уничтожение объекта для Happy Jamsa
Как видите, программа автоматически вызывает деструктор, без какого-либо явного вызова функции деструктора. До настоящего момента вашим программам, вероятно, не требовалось использовать деструктор. Однако, когда программы начнут распределять память внутри объектов, вы обнаружите, что деструктор обеспечивает удобный способ освобождения памяти при уничтожении объекта.
Деструкторы
Деструктор представляет собой функцию, которую C++ автоматически запускает, когда он или ваша программа уничтожает объект. Деструктор имеет такое же имя, как и класс объекта; однако вы предваряете имя деструктора символом тильды (~), например ~employee. В своей программе вы определяете деструктор точно так же, как и любой другой метод класса.