double arrow
Class employee. Представление о деструкторе

4

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");

}

Программа автоматически вызывает деструктор, без какого-либо явного вызова функции деструктора. Когда программы начнут распределять память внутри объектов, вы обнаружите, что деструктор обеспечивает удобный способ освобождения памяти при уничтожении объекта.

4





Сейчас читают про: