- •Базові поняття об’єктно-орієнтованого програмування.
- •Технології та інструментальні засоби проектування програмних систем.
- •Оголошення та структура класу.
- •Потокове введення – виведення.
- •Елементи класу.
- •Конструктори та деструктори.
- •Об’єкти класу.
- •Перевантаження операцій.
- •Види класів.
- •Одинарне наслідування класів.
- •Множинне наслідування класів.
- •Поліморфізм віртуальних функцій.
- •Параметризовані функції та класи.
- •Перетворення типів.
- •Керування виключними станами.
- •Програмування для Windows.
Оголошення та структура класу.
Клас є програмною абстракцією під нього не виділяється пам'ять. Тому спроба ініціалізувати дані всередині класу призведе до помилки. Дані в класі треба розглядати як поля структури, а не як змінні.
Подібність класу до структур визначає ще дві важливі можливості:
можливість оголошувати клас з модифікаторами auto, register, static i extern;
можливість введення операції присвоєння для об'єктів одного класу за механізмом присвоєння структур (побайтове копіювання значень полів).
Загальний синтаксис оголошення класу cхожий до оголошення структур і має вид
class NameClass{
// declarations
}[objectindentificatos];
Дужками {…} визначається тіло класу, яке містить оголошення довільної кількості змінних і функцій. Змінні і функцій, оголошені в тілі класу, називаються членами (class members) класу. У відповідності до цього ми оперуємо членами-даними (member data) та функціями-членами (member functions). З огляду на структури їх іноді називають полями класу (сlass fields). В термінах ООП функції-члени ще називають методами класу (сlass methods). Члени класу є його власністю, і лише в окремих випадках можуть розділятись об'єктами класу.
ОД будь-якого члена класу визначається класом і охоплюється початком оголошення члена та кінцем оголошення класу.
Безпосереднє використання класів неможливе (тут є виключення пов'язане з механізмом вказівників). Оперують лише з об'єктами як екземплярами класів. Список об'єктів даного класу [objectindentificatos] в оголошенні класу є необов'язковим, а самі об'єкти можна декларувати в довільному місці після оголошення класу, як звичайні змінні. Доступ до членів об'єкта здійснюється через ператор . "крапка" (у випадку організації вказівника на об'єкт - використовується операція доступу -> "стрілка"). За умови, коли приналежність члена визначається неоднозначно, треба використовувати оператор ОДД
class A // оголошення класу А
{
long lx; // член класу lx
public: // декларація прав доступу
int x; // член класу x
int vFunct(int); {return 1;} // функція-член класу vFunct
};
main()
{
A a; // створення об'єкта а класу А
a.x++; // доступ до члена а через оператор доступу
a.A::x++; // доступ до члена а через оператор доступу і ОДД
A* p = &a; // організація вказівника на об'єкт класу А
p->x++; // доступ до члена через вказівник i оператор доступу
p->A::x++; // доступ до члена через вказівник,
A* p2 = new A;
}
Потокове введення – виведення.
C++ має в своєму розпорядженні свій власний файл заголовків IOSTREAM.H, що містить набір засобів введення-виведення, специфічних для цієї мови. Потокове введення-виведення в C++ організовується за допомогою комплекту стандартних класів, що підключаються за допомогою файлу IOSTREAM.H. Ці класи містять перевантажені оператори введення >> і виведення <<, які підтримують роботу з даними різних типів. Щоб краще зрозуміти, чому легше працювати з потоками в C++, давайте пригадаємо, як взагалі в мові С реалізується введення і виведення даних. Перш за все мова С не має вбудованих засобів введення-виведення. Всі функції, такі як printf() або scanf(), надаються через зовнішні бібліотеки, хоча і вважаються стандартними, але не є частиною самої мови. У принципі, це дозволяє гнучко вирішувати проблеми, що виникають в різних додатках. Труднощі з'являються у зв'язку з тим, що подібного роду функцій дуже багато, вони по-різному повертають значення і приймають різні аргументи. Програмісти покладаються головним чином на функції введення-виведення формату printf(), scanf() і їм подібні, особливо якщо доводиться працювати з числами, а не з текстом. Ці функції достатньо універсальні, але часто, через велику кількість різних специфікаторів форматування, стають надто громіздкими і важко читаними. Мова C++ так само не має в своєму розпорядженні вбудованих засобів введення-виведення, але пропонує модульний підхід до рішення даної проблеми, групуючи можливості введення-виведення в двох основних потокових класах: istream - містить засоби введення, ostream - містить засоби виведення. У всіх цих класах реалізовані оператори << і >>, оптимізовані для роботи з конкретними даними. Бібліотека IOSTREAM.H містить також класи, за допомогою яких можна керувати введенням-виведенням даних з файлів: ifstream - породжений від istream і підключає до програми файл, призначений для введення даних, а ofstream - породжений від ostream і підключає до програми файл, призначений для виведення даних.