- •2.1 Елементи концепції ооп .. 20
- •1.1 Коментарі.
- •1.2 Прототипи функцій.
- •1.3 Операція розширення області видимості.
- •1.4 Оголошення в операторах.
- •1.5 Перегрузка функцій.
- •1.6 Значення формальних параметрів по замовчуванню.
- •1.7 Посилання та вказівники.
- •1.8 Специфікатор inline
- •1.9 Операції new та delete .
- •1.10 Вказівник на void.
- •1.11 Зв’язування із збереженням типів
- •1.12 Про структури та об’єднання.
- •2.1 Елементи концепції ооп.
- •2.3 Опис протоколу класу.
- •2.4 Передача повідомлень об’єктам.
- •3 Функції-члени.
- •3.1 Функції-члени в межах та за межами формального опису класу.
- •3.2 Про вказівник this.
- •3.3 Перевантаження функцій-членів. Параметри по замовчуванню.
- •4. Конструктори та деструктори.
- •4.1 Поняття про конструктори.
- •4.2 Деструктори.
- •4.3 Досягнення високої ефективності. Конструктор копіювання.
- •5 Глобальні та локальні об’єкти.
- •6 Статична пам’ять та класи.
- •7. Наслідування
- •7.1 Синтаксична реалізація наслідування
- •7.2 Правила доступу до полів даних
- •7.3 Конструктори та деструктори в похідних класах
- •7.4 Використання заміщуючих функцій-членів.
- •7.5 Похідні класи та вказівники.
- •7.6 Ієрархія типів
- •7.7 Множинне наслідування
- •8 Вiртуальнi функцiї та класи
- •8.1 Віртуальні функції.
- •8.2 Чисті віртуальні функції. Абстрактні класи.
- •8.3 Віртуальні деструктори.
- •8.4 Посилання як засіб для реалізації поліморфізму
- •8.5 Технічна реалізація механізму віртуальних функцій.
- •8.6 Віртуальні базові класи
- •8.6.1 Ієрархії класів та наслідування
- •8.6.2 Віртуальні базові класи
- •8.6.3 Виклик конструкторів та віртуальні базові класи.
- •9 Друзі
- •9.1 Дружні класи.
- •9.2 Дружні функції.
- •10 Перевантаження операторiв.
- •10.1 Перевантаження операторів. Загальний підхід.
- •10.2 Перетворення типів.
- •10.3 Перевантаження деяких операторів.
- •10.3.1 Оператор індексування масиву.
- •10.3.2 Перевантаження оператора виклику функції.
- •10.3.3 Оператор доступу до члена класу.
- •10.3.4 Перевантаження операторів інкремента та декремента.
- •10.3.5 Перевантаження операторів управління пам’яттю (new,delete).
- •10.3.6 Перевантаження оператора присвоювання.
- •11.1 Функціональні шаблони
- •11.1.1 Визначення та використання шаблонів функцiй.
- •11.1.2 Перевантаження шаблонiв функцiї.
- •11.1.3 Cпецiалiзованi функцiї шаблона.
- •11.2 Шаблони класів.
- •11.2.1 Визначення шаблонів класу
- •11.2.2 Константи та типи як параметри шаблону
- •11.2.3 Використання шаблонних класів
- •11.2.4 Спецiалiзацiя шаблонiв класу.
- •11.3 Шаблони та конфiгурацiя компiлятора.
- •11.3.1 Шаблони Smart.
- •11.3.2 Шаблони Global I External.
- •12.2 Переадресація вводу-виводу
- •12.3 Розширення потоків для типів кориcтувача
- •12.4 Операції роботи з потоком як дружні
- •12.5 Форматований ввід-вивід
- •12.5.1 Ширина поля
- •12.5.2 Заповнюючий символ
- •12.5.3 Число цифр дійсних чисел
- •12.5.4 Прапорці форматування
- •12.5.5 Маніпулятори
- •12.6 Стан потоку
- •12.7 Файловий ввід-вивід
- •12.7.1 Конструктори файлових потокiв
- •12.7.2 Вiдкриття файлу
- •12.8 Неформатований ввід-вивід
- •12.9 Деякі функції вводу-виводу
- •12.10 Форматування в пам’яті
- •13 Управління виключеннями
- •13.1 Виключення та стек
- •13.2.1 Синтаксис основних конструкцій
- •13.2.1.1 Використання try та сatch
- •13.2.1.2 Використання throw
- •13.2.2 Тип виключення та конструктор копії
- •13.2.3 Пошук відповідного типу виключення
- •13.2.4 Використання terminate() та некеровані виключення
- •13.2.5 Робота з специфікаціями виключень
- •13.2.6 Робота з непередбаченими виключеннями
- •13.2.7 Робота з конструкторами та виключеннями
- •13.2.8 Динамічні об’єкти
- •13.2.9 Передача значень з конструктора та деструктора
- •13.2.10 Робота з ієрархіями виключень
- •13.2.11 Робота з специфічними класами виключень
- •13.3 Структурне управління виключеннями
- •13.3.1 Використання кадрованого управління виключеннями
- •13.3.1.1 Синтаксис
- •13.3.1.2 Про функцію RaiseException()
- •13.3.1.3 Фільтруючий вираз
- •13.3.1.4 Перехоплення виключення процесора
- •13.3.2 Використання завершуючих обробників виключень
Рівненський державний аграрний коледж
Курс лекцій
з дисципліни:
«Об’єктно-орієнтоване програмування»
Рівне 2007
Зміст
Вступ . ...8
1 Деякі особливості С++ ...8
1.1 Коментарі. ...10
1.2 Прототипи функцій. ...10
1.3 Операція розширення області видимості. ...10
1.4 Оголошення в операторах. ...11
1.5 Перегрузка функцій. ...11
1.6 Значення формальних параметрів по замовчуванню. ...12
1.7 Посилання та вказівники. ...13
1.8 Специфікатор INLINE ...16
1.9 Операції NEW та DELETE . ...16
1.10 Вказівник на void. ...17
1.11 Зв’язування з збереженням типів . ...18
1.12 Про структури та об ‘єднання . ...18
Контрольні запитання. ...19
Завдання . ...19
2. Об’єктно-орієнтоване програмування та С++. Класи. .. 20
2.1 Елементи концепції ооп .. 20
2.2 Від структур ANSI C до класів C++ .. 22
2.3 Опис протоколу класу ...24
2.4 Передача повідомлень об’єктам. .. 27
Контрольні запитання. .. 28
Завдання . ...28
3. Про функції-члени класу. ...29
3.1 Функції-члени в межах та за межами формального опису класу.29
3.2 Про вказівник this. ...30
3.3 Перегрузка функцій-членів. Параметри по замовчуванню. ...31
Контрольні запитання. ...32
Завдання . ...32
4. Конструктори та деструктори. ...33
4.1 Поняття про конструктори. ...33
4.2 Деструктори. ...37
4.3 Конструктор копіювання. ...39
Контрольні запитання. ...40
Завдання . ...41
5 Глобальні та локальні об’єкти. ...42
Контрольні запитання. ...44
Завдання . ...45
6. Статична пам’ять та класи. ...45
Контрольні запитання. ...48
Завдання . ...49
7. Наслідування ...49
7.1 Синтаксична реалізація наслідування ...49
7.2 Правила доступу до полів даних ...50
7.3 Конструктори та деструктори в похідних класах ...53
7.4 Використання заміщуючих функцій-членів. ...55
7.5 Похідні класи та вказівники. ...56
7.6 Ієрархія типів ...57
7.7 Множинне наслідування ...58
Контрольні запитання. ...60
Завдання . ...60
8 Віртуальні функції та класи ...61
8.1 Віртуальні функції. ...61
8.2 Чисті віртуальні функції. Абстрактні класи. ...64
8.3 Віртуальні деструктори. ...67
8.4 Посилання як засіб для реалізації поліморфізму ...67
8.5 Технічна реалізація механізму віртуальних функцій. ...68
8.6 Віртуальні базові класи ...70
8.6.1 Ієрархії класів та наслідування ...70
8.6.2 Віртуальні базові класи ...71
8.6.3 Виклик конструкторів та віртуальні базові класи. ...72
Контрольні запитання. ...74
Завдання . ...74
9 Друзі ...75
9.1 Дружні класи. ...75
9.2 Дружні функції. ...77
Контрольні запитання. ...79
Завдання . ...79
10 Перевантаження операторів ...79
10.1 Перевантаження операторів. Загальний підхід. ...79
10.2 Перетворення типів. ...82
10.3 Перевантаження деяких операторів. ...84
10.3.1 Оператор індексування масиву. ...84
10.3.2 Перевантаження оператора виклику функції. ...86
10.3.3 Оператор доступу до члена класу. ...87
10.3.4 Перевантаження операторів інкремента та декремента. ...88
10.3.5 Перевантаження операторів управління пам’яттю (NEW,DELETE). ...88
10.3.6 Перевантаження оператора присвоювання. ...89
Контрольні запитання. ...90
Завдання . ...90
11 Шаблони С++. ...91
11.1 Функціональні шаблони ...91
11.1.1 Визначення та використання шаблонів функцiй. ...91
11.1.2 Перегрузка шаблонiв функцiї. ...94
11.1.3 Cпецiалiзованi функцiї шаблона. ...95
11.2 Шаблони класів. ...95
11.2.1 Визначення шаблонів класу ...95
11.2.2 Константи та типи як параметри шаблону ...97
11.2.3 Використання шаблонних класів ...98
11.2.4 Спецiалiзацiя шаблонiв класу. .100
11.3 Шаблони i конфiгурацiя компiлятора. .102
11.3.1 Шаблони Smart. .102
11.3.2 Шаблони Global i External. .102
Контрольні запитання. .103
Завдання . .104
12 Ввід-вивід в С++ .104
12.1 Система вводу-виводу С++. .105
12.2 Переадресація вводу-виводу .111
12.3 Розширення потоків для типів коритувача .111
12.4 Операції роботи з потоком як дружні .113
12.5 Форматований ввід-вивід .114
12.5.1 Ширина поля .114
12.5.2 Заповнюючий символ .115
12.5.3 Число цифр дійсних чисел .115
12.5.4 Прапорці форматування .116
12.5.5 Маніпулятори .118
12.6 Стан потоку .119
12.7 Файловий ввід-вивід .119
12.7.1 Конструктори файлових потокiв .120
12.7.2 Вiдкриття файлу .120
12.8 Неформатований ввід/вивід. Бінарні файли. .123
12.9 Деякі функції вводу/виводу .124
12.10 Форматування в пам’яті .126
Контрольні запитання. .128
Завдання . .128
13 Управління виключеннями .......................................................................129
13.1 Виключення та стек..........................................................................130
13.2 Робота з управлінням виключеннями мови С++............................130
13.2.1 Синтаксис основних конструкцій..........................................132
13.2.1.1 Використання try та catch............................................132
13.2.1.2 Використання throw.....................................................133
13.2.2 Тип виключення та конструктор копії................................135
13.2.3 Пошук відповідного типу виключення...............................136
13.2.4 Використання terminate() та некеровані виключення........137
13.2.5 Робота з специфікаціями виключень...................................137
13.2.6 Робота з непередбаченими виключеннями.........................137
13.2.7 Робота з конструкторами та виключеннями......................138
13.2.8 Динамічні об’єкти................................................................140
13.2.9 Передача значень з конструктора та деструктора.............141
13.2.10 Робота з ієрархіями виключень.........................................142
13.2.11 Робота з специфічними класами виключень.....................143
13.2.11.1 xmsg............................................................................143
13.2.11.2 xalloc...........................................................................144
13.3 Структурне управління виключеннями...........................................146
13.3.1 Використання кадрованого управління виключеннями
(_try/_except) ..........................................................................146
13.3.1.1 Синтаксис.....................................................................146
13.3.1.2 Про функцію RaiseException().....................................146
13.3.1.3 Фільтруючий вираз......................................................148
13.3.1.4 Перехоплення виключення процесора........................149
13.3.2 Використання завершуючих обробників виключень..........150
(_try/_finally)
Контрольні запитання. ....152
Завдання . ....153
Деякі міркування на закінчення.......................................................................156
Література ........................................................................................................132
Вступ
Важливим етапом в розвитку технології програмування стало створення та досить широке поширення мови програмування С++. Мова програмування C++ зберігає основні типи даних, операції , синтаксис операторів та структуру програми мови С ( про це свідчить сама назва мови: “C” та “++”). Водночас, це зовсім інша мова, яка ввела в практику програмування новий технологічний підхід - об’єктно-орієнтоване програмування. Введення в практику програмування об’єктно-орієнтованої парадигми дозволяє значно підвищити рівень технології створення програмних засобів, скоротити затрати на розробку програм, їх повторне використання, розширити інтелектуальні можливості ЕОМ.
Великий внесок у створення даної парадигми внесли У.Далл та
Б.Мюрхарг, які розробили в 60-х роках мову моделювання дискретних систем Симула-67. Ця мова включила в себе базові концепції ООП. Велике значення у розвитку даного напряму мали роботи по розвитку концепції абстрактних типів даних Б.Лискова, Н.Вірта, Д.Парнаса та ін. Однак, найбільш повно та цілісно об’єктно-орієнтована парадигма була реалізована в мові Smalltalk-80, який був розроблений в 70-ті роки в науковому центрі Palo Alto фірми Xerox під керівництвом А.Гольдберга. По суті, Smalltalk-80 являв собою мову деякої абстрактної машини, яка мала об’єктно-орієнтовану пам’ять. Маніпулювання з елементами пам’яті (об’єктами) грунтувалось на використанні механізму повідомлень, які посилаються об’єктам. Крім того, ця абстрактна машина підтримувала графічно-орієнтований дружній інтерфейс з користувачем. Ця тріада мови Smalltalk-80 стала революційним поворотом в технології програмування. Використання об’єктів дозволило по-перше, конструювати адекватні інформаційні зображення реальних проблемних областей, використовуючи прийняті для цих областей поняття та та семантичні знання, по-друге, створювати ідеальні абстрактні моделі реального світу , формально задаючи закони його існування, по-третє, надати можилвість безпосереднього, прямого, немовного за формою маніпулювання семантичними сутностями середовища, що моделюється (тобто, по суті, можливість маніпулювання об’єктами на підсвідомому рівні, так як це робить людина при управлінні машиною чи інструментом).
Завоювавши право називатись науковою перлиною , мова Smalltalk-80 не стала практичною мовою програмування. Першим індустріальним проривом даної парадигми стало створення під керівництвом С. Джобса персонального комп’ютера фірми Macintosh. Перед створенням цього комп’ютера С.Джобс детально вивчав в Palo Alto результати досліджень по мові Smalltalk-80. Тому архітектура цього комп’ютера була розрахована на підтримку об’єктно-орієнтованого підходу.
Розробка мови С++ - слідуюча віха в становленні об’єктно-орієнтованого підходу як практично універсальної бази в інформаційній індустрії. Аналіз тенденцій та перспектив розвитку даного напряму показує, що він не являється данню моді, а має фундаментальне загальнонаукове значення, здійснюючи все більший вплив на розвиток нових областей інформатики.
1 ДЕЯКІ ОСОБЛИВОСТI C++. КОРОТКИЙ ОГЛЯД.