Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мищишин електронка.doc
Скачиваний:
1
Добавлен:
08.12.2018
Размер:
1.04 Mб
Скачать

Void show_employee(void);

};

Void employee::show_employee(void);

{

cout << "ім'я: " << name << endl;

cout << "Номер службовця: " << employee_id << endl;

cout << "оклад: " << salary << endl;

};

Void main(void)

{

employee worker, boss;

strcpy(worker.name, "John Doe");

worker.employee_id = 12345;

worker.salary = 25000;

strcpy(boss.name, "Happy Jamsa");

boss.employee_id = 101;

boss.salary = 101101.00;

worker.show_employee();

boss.show_employee();

}

24. Конструктор

Конструктор є методом класу, який має таке ж ім'я, як і клас. Наприклад, якщо ви використовуєте клас з ім'ям employee, конструктор також матиме ім'я employee. Якщо ваша програма оголосила конструктор, C++ автоматично викликатиме його кожного разу, коли ви створюєте об'єкт. Наступна програма CONSTRUC.CPP створює клас з ім'ям employee. Програма також оголошує конструктор з ім'ям employee, який присвоює початкові значення об'єкту. Проте конструктор не повертає ніякого значення, не дивлячись на те, що він не оголошується як void. Натомість ви просто не вказуєте тип значення, що повертається:

class employee {

public:

employee(char *, long, float); //Конструктор

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. В даному випадку конструктор використовує оператор глобального дозволу (::) і ім'я класу перед ім'ям кожного елемента.

25. ДеструКтор

Деструктор автоматично запускається кожного разу, коли програма знищує об'єкт. Інколи необхідно створити списки об'єктів, що збільшуються або зменшуються в процесі виконання програми. Щоб створити такі динамічні списки, ваша програма для зберігання об'єктів розподіляє пам'ять динамічно. До цього моменту ви можете створювати і знищувати об'єкти в процесі виконання програми. В таких випадках має сенс використання деструктора. Кожна із написаних вами дотепер програм створювала об'єкти на самому початку свого виконання, просто оголошуючи їх. При завершенні програм C++ знищував об'єкти. Якщо ви визначаєте деструктор усередині своєї програми, C++ автоматично викликатиме деструктор для кожного об'єкту, коли програма завершується (тобто коли об'єкти знищуються). Подібно конструктору, деструктор має таке ж ім'я, як і клас об'єкту. Проте для деструктора ви передуєте його ім’я символом тильди (~), як показано нижче:

~clase_name(void) // ~ вказує на деструктор

{

// Оператори деструктора

}

На відміну від конструктора ви не можете передавати параметри деструктору.

Наступна програма DESTRUCT.CPP визначає деструктор для класу employee:

void employee:: ~ employee(void)

{

cout << "Знищення об'єкту для " << name << endl;

}

В даному випадку деструктор просто виводить на ваш екран повідомлення про те, що C++ знищує об'єкт. Коли програма завершується, C++ автоматично викликає деструктор для кожного об'єкту. Нижче приведена реалізація програми DESTRUCT.CPP:

class employee {

public:

employee(char *, long, float);

~ employee(void);