- •Об'єктно-орієнтоване
- •Класи і об'єкти
- •Дані об'єкту (змінні об'єкту,члени-дані)
- •Методи класу
- •Властивості
- •Приклад: Трикутник
- •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
Інкапсуляція
Інкапсуляція - здатність об'єкту приховувати внутрішній устрій своїх властивостей і методів
Згідно даному принципу, клас повинен розглядатися як чорний ящик
Зовнішній користувач не знає деталі реалізації об'єкту і працює з ним лише шляхом наданого об'єктом інтерфейсу
Дотримання даному принципу може зменшити число зв'язків між класами і спростити їх незалежну реалізацію, модифікацію і тестування
class IntStack
{
public:
void Push(int value);
int Pop();
bool IsEmpty()const;
private:
//тут розташовуються дані
//необхідні для реалізації стека цілих чисел
};
Спадкоємство
Спадкоємство дозволяє описати новий клас на основі вже існуючого батьківського (базового) класу
Клас-нащадок може додати свої власні властивості і методи, користуватися методами і властивостями базового класу
Спадкоємство дозволяє будувати ієрархії класів
class Plane
{
public:
void TakeOff(); void Fly(); void Land();
private:
double m_fuel;
};
class MilitaryPlane : public Plane
{
public:
void Attack(); private:
int m_ammo;
};
Поліморфізм
Поліморфізмом називають явище, при якому класи-нащадки можуть змінювати реалізацію методу класу- предка, зберігаючи його інтерфейс
Поліморфізм дозволяє обробляти об'єкти класів-нащадків як однотипні об'єкти, не дивлячись на те, що реалізація методів у них може розрізнятися
class Shape
{
public:
virtual double
GetArea()=0; };
class Rectangle : public Shape
{
public:
virtual double
GetArea()
{
return width *
height;
}
private:
double width, height;
};
class Circle : public Shape
{
public:
virtual double GetArea()
{
return 3.1415927 * radius * radius;
}
private:
double radius;
};
Оголошення класу в C++
Для оголошення класу в C++ служить ключове слово class
Синтаксис
class ідентифікатор
{}; // оголошення даних і методів
Реалізація методів класу може бути винесена за межі оголошення класу
Приклад
class Date
{
int year, month, day; void next();
void print();
};
// Реалізація методів класу void Date::print()
{
printf(“%d/%d/%d”, day, month, year);
}
void Date::next()
{
// ...
}
Розміщення класів в різних файлах
Загальноприйнятою практикою є розміщення оголошення класів в заголовних файлах .h, а їх реалізації - у файлах .cpp
Підвищення модульності проекту
Кожен клас може бути підключений для подальшого використання за допомогою директиви #include “ім'я заголовного файлу”
При внесенні змін до реалізації методу класу перекомпіляції піддадуться лише змінені файли
date.h |
date.cpp |
main.cpp |
class Date |
#include “date.h” |
#include “date.h” |
{ |
|
|
public: |
void Date::Next() |
int main() |
void Next(); |
{ |
{ |
void Print(); |
// ... |
Date date1; |
private: |
} |
return 0; |
int m_day; |
|
} |
int m_month; |
void Date::Print() |
|
int m_year; |
{ |
|
}; |
// ... |
|
|
} |
|