Professional Documents
Culture Documents
Lab 05 CLASSES
Lab 05 CLASSES
6.1 Ви навчитесь:
По завершенні цього розділу Ви будете вміти:
створювати класи, об’єкти
реалізовувати основні принципи ООП
пояснити реалізацію конструкторів та деструкторів
Як було сказано вище, клас – це абстрактний тип даних. Для того щоб
використати розроблений клас у програмі необхідно оголосити змінну даного
типу. Така змінна буде називатись об’єктом даного класу. Таким чином об’єкт
класу – це конкретна змінна (екземпляр) класу (даного типу інформаційної
структури).
Оголосити об’єкт даного класу можна таким же чином, як і змінну будь-
якого іншого стандартного або заданого користувачем типу. Наприклад,
оголосити об’єкт наведеного вище класу MyClass при умові, що даний клас
описаний у файлі MyClass.h, який знаходиться у одному каталозі з проектом,
можна наступним чином:
1 #include "MyClass.h"
2 int MyClass::get_i() { return i; }
3 void MyClass::set_i(int x) { i=x; return; }
4 int main() {
5 MyClass MyObj; //Оголосили об’єкт даного класу
6 return 0;
7 }
Роздiл атрибутiв призначений для оголошення змiнних класу, які
називаються членами даних. Їх типи в сукупностi задають множину можливих
значень, або станiв об'єктiв класу. Роздiл операцiй призначений для оголошення
і визначення дій, якi можна виконувати над об'єктами класу або, за
термінологією ООП, таких, що виконуються самими об'єктами. Такі операцiї
ще називаються функціями членами або методами класу. В сукупності вони
описують поведінку об'єктiв класу.
6.2.2Конструктори і деструктори
Конструктори і деструктори - це спецiальнi методи класу, якi
автоматично викликаються при створеннi або знищеннi об'єктiв.
Кожний клас повинен мати хоч би один конструктор, але, як правило, їх
задають декiлька. Цільове призначення конструкторів класу є двояким. З
одного боку (основного) - це створення "порожнього" об'єкта, тобто розподiл
пам'ятi для змiнних класу цього об'єкта. З іншого – це додаткова iнiцiалiзацiя
стану об'єкта, тобто заповненя "порожнього" об'єкта, оскільки саме в
конструкторi визначається, якими значеннями потрібно проiнiцiалiзувати
змiннi об'єкта.
Конструктори існують трьох типів: по замовчуванні, з параметрами і
конструктор копіювання (або конструктор копії). Кожен клас може містити
лише один конструктор по замовчуванні, один копіювання і довільну кількість
конструкторів з параметрами. Це визначає можливість перевантаження
конструкторів як звичайних функцій.
Наведемо приклади оголошення конструкторів всiх типiв для деякого
класу Patient:
1 class Patient {
2 char* m_s_Name; // закриті по замовчуванні
3 int m_n_Age; // члени даних
4 public:
5 // Конструктор по замовчуванню
6 Patient();
7 // Конструктори з параметрами для iнiцiалiзацiї
8 Patient(char* name, int Age);
9 Patient(char* name);
10 // Конструктор копiї
11 Patient(const Patient &source);
12 // iншi оголошення - можливi
13 };
14 //Тепер можна написати реалізацію цих конструкторiв:
15 // Конструктор по замовчуванню
16 Patient::Patient() {
17 m_s_Name = "";
18 m_n_Age = 0;
19 }
20 // Конструктори з параметрами
21 Patient::Patient(char* name, int Age) {
22 m_s_Name = name;
23 m_n_Age = Age;
24 }
25 // Конструктор перетворення типу
26 Patient::Patient(char* name) {
27 m_s_Name = name;
28 }
29 // Констуктор копiї
30 Patient::Patient(const Patient &source) {
31 m_s_Name = source.m_s_Name;
32 m_n_Age = source.m_n_Age;
33 }
34
35 //Тепер стають можливими оголошення
36 //об'єктiв, якi приводять до виклику
37 //вiдповiдних конструкторiв:
38 // Виклик конструктора по замовчуванню
39 Patient NN;
40 // Виклики конструкторів з iнiцiалiзацiєю
41 Patient Ivanov ("Ivanov",35), Petrov ("Petrov");
42 // Виклик конструктора копiї
43 Patient theSameIvanov ("Ivanov")=Ivanov;
1 class line {
2 public:
3 int x1, y1, x2, y2;
4 line(int _x1, int _y1, int _x2, int _y2);
5 void show();
6 void move(int x,int y);
7 ~line();
8 };
9 //… … … … … … … … …
10 void main()
11 {
12 // створюється об'єкт s класу line
13 line s(12,43,33,43);
14 int localx, localy;
15 localx=s.x1; //доступ до елементу-даних x1
16 localy=s.y1; //доступ до елементу-даних y1
17 s.show(); //доступ до елемента-функції show();
18 }