Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_LAB_Part_2_Obyektno-orientov_progr.DOC
Скачиваний:
11
Добавлен:
03.05.2019
Размер:
418.3 Кб
Скачать

Лабораторна робота №1.

Класи й об'єкти в С++

Мета. Одержати практичні навички реалізації класів на С++.

Основний зміст роботи.

Написати програму, в якій створюються і руйнуються об'єкти, визначеного користувачем класу. Виконати дослідження викликів конструкторів і деструкторів.

Короткі теоретичні зведення Клас.

Клас — фундаментальне поняття С++ і лежить в основі багатьох властивостей С++. Клас надає механізм для створення об'єктів. У класі відбиті найважливіші концепції об’єктно-орієнтованого програмування: інкапсуляція, спадкування, поліморфізм.

З погляду синтаксису клас у С++ — це структурований тип, утворений на основі вже існуючих типів.

У цьому сенсі клас є розширенням поняття структури. У найпростішому випадку клас можна визначити за допомогою конструкції:

тип_класу ім'я_класу {список_членів_класу};

де

тип_класу – одне з службових слів class, struct, union;

ім'я_класу – ідентифікатор;

список_членів_класу – визначення й описи типізованих даних і приналежних класу функцій.

Функції – це методи класу, що визначають операції над об'єктом.

Дані – це поля об'єкта, що утворять його структуру. Значення полів визначає стан об'єкта.

Приклади

struct date //дата

{int month,day,year; // поля: місяць, день, рік

void set(int,int,int); // метод - установити дату

void get(int*,int*,int*); // метод- одержати дату

void next(); // метод- установить наступну дату

void print(); // метод - вивести дату

};

struct class complex // комплексне число

{double re,im;

double real(){return(re);}

double imag(){return(im);}

void set(double x,double y){re = x; im = y;}

void print(){cout<<”re = ”<<re; cout<<“im = ”<<im;}

};

Для опису об'єкта класу (екземпляра класу) використовується конструкція:

ім'я_класу ім'я_об'єкта;

date today,my_birthday;

date *point = &today; //покажчик на об'єкт типу date

date clim[30]; // масив об'єктів

date &name = my_birthday; //посилання на об'єкт

В обумовлені об'єкти входять дані, які відповідають членам-даним класу. Функції — члени класу дозволяють обробляти дані конкретних об'єктів класу. Звертатися до даних об'єкта і викликати функції для об'єкта можна двома способами. По-перше, за допомогою “кваліфікованих” імен:

ім'я_об'єкта. ім'я_даного

ім'я_об'єкта. ім'я_функції

Наприклад:

complex x1,x2;

x1.re = 1.24;

x1.im = 2.3;

x2.set(5.1,1.7);

x1.print();

Другий спосіб доступу використовує покажчик на об'єкт

покажчик_на_об'єкт–>ім'я_компонента

complex *point = &x1; // чи point = new complex;

point –>re = 1.24;

point –>im = 2.3;

point –>print();

Доступність компонентів класу

У розглянутих раніше прикладах класів компоненти класів є загальнодоступними. У будь-якому місці програми, де “видно” визначення класу, можна одержати доступ до компонентів об'єкта класу. Тим самим не виконується основний принцип абстракції даних – інкапсуляція (приховання) даних всередині об'єкта. Для зміни видимості компонент у визначенні класу можна використовувати специфікатори доступу : public, private, protected.

Загальнодоступні (public) компоненти доступні в будь-якій частині програми. Вони можуть використовуватися будь-якою функцією як всередині даного класу, так і поза ним. Доступ ззовні здійснюється через ім'я об'єкта :

ім'я_об'єкта.ім'я_члена_класу;

посилання_на_обєкт.ім'я_члена_класу;

покажчик_на_об'єкт->ім'я_члена_класу;

Власні (private) компоненти локалізовані в класі і не доступні ззовні. Вони можуть використовуватися функціями-членами даного класу і функціями-“друзями” того класу, в якому вони описані.

Захищені (protected) компоненти доступні всередині класу і в похідних класах.

Змінити статус доступу до компонентів класу можна і за допомогою використання у визначенні класу ключового слова class. У цьому випадку усі компоненти класу за замовчуванням є власними.

Приклад.

class complex

{

double re, im; // private за замовчуванням

public:

double real(){return re;}

double imag(){return im;}

void set(double x,double y){re = x; im = y;}

};

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

Недоліком розглянутих раніше класів є відсутність автоматичної ініціалізації створюваних об'єктів. Для кожного знову створюваного об'єкта необхідно було викликати функцію типу set (як для класу complex), або явно привласнювати значення даним об'єкта. Однак для ініціалізації об'єктів класу в його визначення можна явно включити спеціальну компонентну функцію, що називається конструктором. Формат визначення конструктора наступний

ім'я_класу(список_форм_параметрів){оператори_тіла_конструктора}

Ім'я цієї компонентної функції за правилами мови С++ повинно збігатися з ім'ям класу. Така функція автоматично викликається при визначенні чи розміщенні в пам'яті за допомогою оператора new кожного об'єкта класу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]