
- •Лабораторна робота № 1
- •Короткі теоретичні відомості
- •Лабораторна робота № 2 побудова|шикування| рекурсивних функцій
- •Короткі теоретичні відомості
- •Лабораторна робота № 3 створення|створіння| і обробка масивів
- •Короткі теоретичні відомості
- •Лабораторна робота № 4 робота з рядками|
- •Лабораторна робота № 5 робота з|із| абстрактними типами даних(атд|): struct, union, enum
- •Короткі теоретичні відомості
- •Лабораторна робота № 6
- •Короткі теоретичні відомості Клас.
- •Приклади|зразки|.
- •Приклад|зразок|.
- •Список літератури Основна
- •Додаткова
- •39614, М. Кременчук, вул. Першотравнева, 20
Лабораторна робота № 6
КЛАСИ І ОБ'ЄКТИ В С++
Мета|ціль|. Одержати|отримати| практичні навички|навички| реалізації класів на С++
Короткі теоретичні відомості Клас.
Клас фундаментальне поняття С++, він лежить в основі багатьох властивостей С++. Клас надає механізм для створення|створіння| об'єктів. У класі відбито найважливіші концепції об'єктно-орієнтованого програмування: інкапсуляція, успадковування, поліморфізм.
З погляду синтаксису, клас у С++ це структурований тип, утворений на підставі вже існуючих типів.
У цьому сенсі|змісті,рації| клас є|з'являється,являється| розширенням поняття структури. У простому випадку клас можна визначити за допомогою конструкції:
тип_класа ім’я_класу{ список_членів_класу};
де тип_класу – одне з службових слів 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 у|в,біля|){re = x; im = у|в,біля|;}
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 у|в,біля|){re = x; im = у|в,біля|;}
};
Конструктор
Недоліком|нестачею| розглянутих|розгледіти| раніше класів є|з'являється,являється| відсутність автоматичної ініціалізації створюваних об'єктів. Для кожного новостворюваного об'єкта необхідно було викликати|спричинити| функцію типу set (як для класу complex) або явно присвоювати значення даним об'єкта. Проте|однак| для ініціалізації об'єктів класу до його визначення можна явно включити спеціальну компонентну функцію, названу конструктором. Формат визначення конструктора наступний|слідуючий|:
ім'я _класу(список_форм_параметрів){ оператори_тіла_конструктора}
Ім'я цієї компонентної функції за правилами мови|язика| С++ має співпадати|збігатися| з|із| ім'ям класу. Така функція автоматично викликається|спричиняється| під час визначенні або розміщенні в пам'яті за допомогою оператора new кожного об'єкту класу.