Primer 3 Лекция 3.
Представление о деструкторе.
Do
Class employee
Primer 2 Лекция 3.
#include <iostream>
#include <string.h>
using namespace std;
{
public:
employee(char *, long, float);
employee(char *, long);
int show_employee();
int change_salary(float);
long get_id();
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;
}
employee::employee(char *name, long employee_id)
{
strcpy(employee::name, name);
employee::employee_id = employee_id;
{
cout << "Введите оклад для " << name << " меньше $50000: ";
cin >> employee::salary;
}
while (salary >= 50000.0);
}
int employee::show_employee()
{
cout << "Служащий: " << name << endl;
cout << "Номер служащего: " << employee_id << endl;
cout << "Оклад: " << salary << endl;
}
int main()
{
system("chcp 1251");
employee worker("Савин", 101, 1000);
employee manager("Нагеь", 102);
worker.show_employee();
manager.show_employee();
system("pause");
}
Деструктор автоматически запускается каждый раз, когда программа уничтожает объект. Каждая из созданных до сих пор программ создавала объекты в самом начале своего выполнения, просто объявляя их. При завершении программ C++ уничтожал объекты. Если определить деструктор внутри программы, C++ будет автоматически вызывать деструктор для каждого объекта, когда программа завершается (т.е. когда объекты уничтожаются). Подобно конструктору, деструктор имеет такое же имя, как и класс объекта. В случае деструктора его имя предваряется символом тильды (~):
~class_name (void) //указывает деструктор |
{ |
// Операторы деструктора |
} |
highlightSyntax('cpp_73341','cpp'); В отличие от конструктора нельзя передавать параметры деструктору. Следующая программа определяет деструктор для класса employee:
void employee:: ~ employee(void) |
{ |
cout << "Уничтожение объекта для " << name << endl; |
} |
highlightSyntax('cpp_91448','cpp'); Деструктор выводит на ваш экран сообщение о том, что C++ уничтожает объект. Когда программа завершается, C++ автоматически вызывает деструктор для каждого объекта. Реализация программы:
#include <iostream>
#include <string.h>
using namespace std;
{
public:
employee(char *, long, float);
~employee();
int show_employee();
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;
}
int employee::show_employee()
{
cout << "Служащий: " << name << endl;
cout << "Номер служащего: " << employee_id << endl;
cout << "Оклад: " << salary << endl;
}
employee::~employee()
{
cout << "Уничтожение объекта для " << name << endl;
}
int main()
{
system("chcp 1251");
employee worker("Савин", 101, 10000.0);
worker.show_employee();
worker.~employee();
system("pause");
}
Программа автоматически вызывает деструктор, без какого-либо явного вызова функции деструктора. Когда программы начнут распределять память внутри объектов, вы обнаружите, что деструктор обеспечивает удобный способ освобождения памяти при уничтожении объекта.