- •Лабораторна робота № 1
- •Короткі теоретичні відомості
- •Лабораторна робота № 2 Побудова|шикування| рекурсивних функцій
- •Короткі теоретичні відомості
- •Лабораторна робота № 3 Створення|створіння| і обробка масивів
- •Короткі теоретичні відомості
- •Лабораторна робота № 4 Робота з рядками|
- •Лабораторна робота № 5 Робота з|із| абстрактними типами даних(атд|): struct, union, enum
- •Короткі теоретичні відомості
- •Лабораторна робота № 6
- •Короткі теоретичні відомості Клас.
- •Приклади|зразки|.
- •Приклад|зразок|.
- •Список літератури Основна
- •Допоміжна
- •Деякі функції роботи з рядками із файлу string.H
- •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 кожного об'єкту класу.