You are on page 1of 5

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Чорноморський національний університет


імені Петра Могили
Факультет комп’ютерних наук
Кафедра інженерії програмного забезпечення

ЗВІТ
з лабораторної роботи № 6
«Конструктори, деструктори»
Варіант № 18
Дисципліна «Основи програмування»
Спеціальність «Інженерія програмного забезпечення»
121–ЛР.6–110.22111018

Cтудент __________М. В. Мичко


(підпис)
__06.04.2022 __
(дата)

Викладач _____________А. В. Швед


(підпис)
_____________
(дата)

Миколаїв – 2022
ЛАБОРАТОРНА РОБОТА №6
Тема роботи: Конструктори, деструктори.
Мета роботи: Придбання навичок роботи із класами. Конструктори та
деструктори
Завдання:
1. Створити в класі наступні типи конструкторів:
1.1. без параметра,
1.2. з одним параметром,
1.3. з двома параметрами
1.4. з трьома параметрами (спеціальні конструктори не використовувати).
1.5. Продемонструвати делегування конструкторів.
2. Продемонструвати в коді використання списку ініціалізації.
3. Додати деструктор.
4. Використати в функції main всі оголошені в класі конструктори та
продемонструвати роботу деструктора. Створити та використати вказівник на
об‘єкт класу( пам‘ять під об‘єкт виділяється в HEAP).
КОНТРОЛЬНІ ПИТАННЯ
1. Перерахуйте властивості конструкторів.
2. Перерахуйте властивості деструкторів.
3. Перевантаження конструкторів.
4. Використання сетерів та гетерів.
5. Використання списоку ініціалізації
6. Делегування конструкторів
Ініціалізація коду:
#pragma warning(disable:4996)
#include <iostream>
#include "windows.h"
using namespace std;

class Resume
{
char name[25];
int age;
int height;
public:
Resume() { cout << "ctr" << endl; } // 1.1 без параметра
Resume(const char* name) {
strcpy(this->name, name);
} // 1.2 з одним параметром
Resume(int age):age(age) {}//2.використання списку ініціалізації(коли матриця то нельзя)
/*resume(const char* name = "Ivanov", int age = 18) {
strcpy(this->name, name);
this->age = age;
}*/
Resume(const char* name,int age):Resume(name,age,0) {
}//1.3 з двома параметрами та делегування
Resume(const char* name, int age,int height) {
strcpy(this->name, name);
this->age = age;
this->height = height;
}//1.4 з трьома параметрами та 1.5
~Resume() { cout << "destr" << endl; }//3.Деструктор
void Print() {
cout << "name=" << name << " age=" << age << " height=" << height << endl;
}
};
int main()
{
Resume* r1= new Resume;
Resume* pr1 = r1;
delete r1;
Resume resume1;
resume1.Print();//ctr
Resume resume2("Petrov");
resume2.Print();//petrov
Resume resume3(18);
resume3.Print();
Resume resume4("Sidorov",17);// коли створюється об'єкт класу тоді виводиться память та
викликається конструктор(який задовільняє вимогам)
resume4.Print();//якщо є хоча 1 конструктор то конструктор за замовчування не
створюється
Resume resume5("Ivanov", 17,190);
resume5.Print();

}
//resume1=resume() - це виклик конструктора класу

КОНТРОЛЬНІ ПИТАННЯ
1) 1.конструктор класу викликається щораз, коли створюється об'єкт класу,
тобто в момент оголошення об'єкта. Таким чином, в C++ оператор
оголошення змінної є виконуваним оператором;
2.конструктор звичайно ініціалізує дані - члени класу й резервує пам'ять для
динамічних членів;
3.конструктор має те ж ім'я, що й клас, членом якого він є;
4.для конструктора не вказується тип значення, що вертається;
5.конструктор не може повертати значення;
6.конструктор не успадковується, окрім особливого випадку;
7.клас може мати скільки завгодно перевантажених конструкторів;
8.якщо в класі не визначений ні один конструктор, компілятор генерує
конструктор за замовчуванням, що не має параметрів.
2) 1.деструктор викликається при видаленні об'єкта;
2.деструктор звичайно виконує роботу зі звільнення пам'яті, зайнятої
об'єктом;
3.деструктор має те ж ім'я, що й клас, якому він належить, з попереднім
символом ~;
4.деструктор не може мати параметрів;
5.деструктор не може повертати значення;
6.деструктор не успадковується;
7.клас не може мати більше одного деструктора;
8.якщо в класі не визначений деструктор, компілятор генерує деструктор за
замовчуванням.
3) Конструктор класу, як будь-який інший метод, може бути перевантажений.
Тобто в одного класу може бути скільки завгодно багато різних
конструкторів. Конструктор для конкретного екземпляра викликається
лише один раз - при його створенні, тому з багатьох конструкторів буде
викликано лише один.
4) Методи, ім'я яких починається з Set, використовуються для присвоєння
значень змінним, членам класу і називаються сеттерами. Вони приймають
один параметр та не повертають значень.
Методи, ім'я яких починається з Get, використовуються для повернення
значень змінних, членів класу і називаються геттерами. Вони не приймають
параметрів та мають тип повертаємого значення відмінний від void.
5) Використання списку ініціалізації майже ідентичне виконанню прямої
ініціалізації. Список ініціалізації членів знаходиться відразу ж після
параметрів конструктора. Він починається з двокрапки а потім значення для
кожної змінної вказується в круглих дужках.
6) можна із одного конструктора класу викликати інший конструктор цього ж
класу. Це і є делегування конструкторів.
Результати роботи програми:

Рисунок 1 – Результат коду.


Висновки:
Отримано навички роботи з конструкторами. Вивчено принципи їх праці.
Вивчено для чого потрібні вони. Використано список ініціалізації та делегування.
Застосовано вивчені навички на практиці у середовищі розробки Visual Studio.
Оформлено звіт згідно вимог.

You might also like