- •Об'єктно-орієнтоване
- •Класи і об'єкти
- •Дані об'єкту (змінні об'єкту,члени-дані)
- •Методи класу
- •Властивості
- •Приклад: Трикутник
- •class Point
- •Найважливіші принципи ООП
- •Абстракція даних
- •Інкапсуляція
- •class IntStack
- •Спадкоємство
- •class Plane
- •Поліморфізм
- •class Shape
- •Приклад
- •Розміщення класів в різних файлах
- •date.h
- •Обмеження доступу до даних і методів
- •Публічні (public) поля класу
- •Закриті (приватні)
- •Захищені поля класу
- •class Date
- •Посилання на себе
- •class ListItem
- •Константні методи
- •Коли виникає необхідність в константних методах
- •class IntArray
- •Мінливі (mutable) дані класу
- •class VeryComplexShape
- •Ініціалізація екземпляра
- •class Date
- •Конструктор
- •Ініціалізація даних екземпляра класу
- •Списки ініціалізації
- •class Foo
- •Деініціалізація екземпляра класу
- •class MyFile
- •Конструктор
- •Автоматично
- •Створення власного
- •Заборона
- •class CFile
Обмеження доступу до даних і методів
класуДоступ до даних і методів класу ззовні може бути обмежений
Рекомендується забороняти доступ до даних класу в обхід його методів
Для розділення прав доступу до полів класу використовуються ключові слова
public:private:protected:
Публічні (public) поля класу
Public-методы і дані класу визначають його інтерфейс
доступ до них можливий з будь-якої частини коди
необхідно розміщувати в public- розділ класу лише необхідний набір методів, що виконують високорівневі операції над об'єктом класу
Закриті (приватні)
поля класу
Private-дані і методи класу визначають його реалізацію
Доступ до них дозволений лише з методів даного класу
Рекомендується всі дані класу робити закритими, їх обробку здійснювати усередині методів
Закриті методи класу зазвичай використовуються прилюдними методами, вирішуючи внутрішні завдання класу
Захищені поля класу
Protected-дані і методи визначають інтерфейс для похідних класів
Доступ до них дозволений зсередини методів даного класу і всіх його нащадків
У захищеній зоні розміщують методи, які не мають бути видні зовні класу, але реалізація яких може бути перевизначена або використана похідними класами
class Date
{
public:
void Next(); void Print();
private:
int year, month, day;
};
// Реалізація методів класу void Date::Print()
{
printf(“%d/%d/%d”, day, month, year);
}
void Date::Next()
{
// ...
}
Посилання на себе
У середині методів класу для звернення до даних класу можна використовувати їх імена
У метод класу неявно передається покажчик на об'єкт, для якого він викликається
Доступний даний покажчик по ключовому слову this
class ListItem
{
public:
void Append(ListItem *pItem)
{
pItem->m_pNext = this; m_pPrevious = pItem; m_pNext = NULL;
}
private:
ListItem *m_pNext; ListItem *m_pPrevious; int m_data;
};
Константні методи
У мові C++ методи об’єкту, які не змінюють його стан (його дані) можуть бути об’явлені константними
Наприклад, методи, що повертають значення певних полів даних
Змінити дані класу з константного методу не можна
Коли виникає необхідність в константних методах
Якщо об'єкт був оголошений як константа, або доступний по константному посиланню або покажчику на const, то викликати у нього можна лише константні методи
Це заставляє оголошувати методи константними скрізь, де це лише можливо
class IntArray |
|
private: |
|
||
|
||
|
||
|
||
{ |
|
int *m_pData; |
|
||
|
||
|
||
|
||
public: |
|
int m_numberOfItems; |
|
||
|
||
|
||
… |
|
}; |
|
||
|
||
|
||
int GetSize()const |
|
void f(IntArray const& array) |
|
||
|
||
|
||
{ |
|
|
|
||
|
||
|
||
return |
|
{ |
|
||
|
||
m_numberOfItems; |
|
int i = array.GetSize(); |
|
||
|
||
|
||
} |
|
// можна |
|
||
|
||
|
||
void ClearElements() |
|
array.ClearElements(); |
|
||
|
||
|
||
{ |
|
// не можна - |
|
||
|
||
|
||
delete [] m_pData; |
|
неконстантні методи недоступні |
|
||
|
||
|
||
m_pData = NULL; |
|
} |
|
||
|
||
|
m_numberOfItems = 0;
}