Читайте также:
|
|
Деструктор автоматически запускается каждый раз, когда программа уничтожает объект. В следующих уроках вы узнаете, как создать списки объектов, которые увеличиваются или уменьшаются по мере выполнения программы. Чтобы создать такие динамические списки, ваша программа для хранения объектов распределяет память динамически (что вы еще не научились делать). К настоящему моменту вы можете создавать и уничтожать объекты в процессе выполнения программы. В таких случаях имеет смысл применение деструкторов.
Каждая из созданных вами до сих пор программ создавала объекты в самом начале своего выполнения, просто объявляя их. При завершении программ 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
Как видите, программа автоматически вызывает деструктор, без какого-либо явного вызова функции деструктора. До настоящего момента вашим программам, вероятно, не требовалось использовать деструктор. Однако, когда программы начнут распределять память внутри объектов, вы обнаружите, что деструктор обеспечивает удобный способ освобождения памяти при уничтожении объекта.
Дата добавления: 2015-07-26; просмотров: 46 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Указатели | | | Перегрузка конструкторов |