Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекції ООП1.doc
Скачиваний:
5
Добавлен:
17.11.2019
Размер:
553.98 Кб
Скачать

4. Умовна компіляція

Вихідний файл можна компілювати не цілком, а по частинам, використовуючи директиви умовної компіляції:

#if LEVEL>3

Текст1

#elif LEVEL>1

Текст2

#else

ТекстЗ #endif

Допускається, що LEVEL - це макроім'я, тому вирази у директивах #if та #elif можна обчислити під час обробки вихідного тексту припроцесором.

Отже, якщо LEVEL >3, то компілюватися буде текст1, якщо LEVEL >1, то текст2, в іншому випадку текстЗ. Блок умовної компіляції повинен закінчуватися директивою #endif.

В якійсь мірі директива #if подібна на умовний оператор if. Однак, на відміну від нього, умова - це константа, яка обчислюється на етапі припроцесора, і фрагменти тексту, які не задовольняють умови, просто ігноруються.

Директив #elif може бути декілька (або ні одної), директива #else також може бути упущена.

Директива #ifdef - модифікація умови компіляції. Умова вважається виконаною, якщо вказане після неї макроім'я визначене. Відповідно для директиви #ifndef умова виконана, якщо ім'я не визначено.

Додаткові директиви препроцесора

Директива #pragma використовується для видачі додаткових вказівок компілятору. Наприклад, не видавати попередження при компіляції, або вставити додаткову інформацію. Конкретні можливості директиви #рга§та у різних компіляторів відмінні.

Директива #error видає повідомлення і завершує компіляцію. Наприклад, конструкція:

#ifdef Unix

#error "Програму можна компілювати тільки для Unix"

#endif

видасть повідомлення та не дасть відкомпілювати вихідний файл, якщо макроім'я Unix не визначене.

Директива #line змінює номер стрічки і ім'я файла, які зберігаються в попередньо визначених макроіменах _FILE_ і _LINE_.

Окрім директив, у припроцесора є одна операція # #, яка об'єднує стрічки, наприклад А # # В.

Заняття №5 Тема: Специфікація, об'єктів на основі абстрагування

Мета: Ознайомлення з поняттям класу об'єкту, іманентними властивостями

класу, елементами зберігання. Вивчення сигнатури. Представлення об'єктів значеннями, константи типу, перерахувальний тип, множинний тип.

План заняття:

  1. Поняття класу об'єктів.

  2. Іманентні властивості класу.

  3. Елементи зберігання.

  4. Агрегатування властивостей. Сигнатури.

5. Представлення об'єктів значеннями.

6. Константи типу. Перераховуваний тип. Множинний тип.

1. Поняття класу об'єктів.

Головною відмінністю С++ від С є можливість опрацьовувати новий тип даних - клас.

Дуже часто програми мають справу з сукупностями даних: ім'я, посада, табельний номер і.т.д. Кожна окрема складова не описує людину, суть має лише разом взята інформація. Проста структура, така як масив прекрасно підходить для зберігання значень, однак зовсім не придатна для зберігання сукупності даних різних типів. Таким чином масиву не достатньо для зберігання комплексної інформації.

В С++ структура, яка може об'єднати декілька різнотипних змінних в одному об'єкті, називається класом.

У об'єктно-орієнтованому підході до розробки програм основним є поняття класу об'єкту.

Клас визначається як множина об'єктів, що володіють внутрішніми (іманентними) особливостями, що властиві будь-якому об'єктові відповідного класу. Причому специфікація (визначення) класу проводиться шляхом визначення його іманентних властивостей, які в цьому плані виконують роль класоутворюючих ознак. Наприклад, властивість успішність природна всім хто навчається і є класоутворюючою ознакою класу ОКС-407.

В

Клас:

ОКС-407

якості інших ознак цього класу можуть використовуватися: вік, порядковий номер і т.д. Сукупність подібних властивостей і визначає клас ОКС-405.

Об’єкт: СТУДЕНТ

В

ВЛАСТИВОСТІ

  1. Ім’я

  2. Порядковий номер

  3. Середній бал

ЛАСТИВОСТІ

  1. Ім'я

  2. Порядковий номер

  3. Середній бал

Об’єкт: СТУДЕНТ

В

ВЛАСТИВОСТІ

  1. Ім’я

  2. Порядковий номер

  3. Середній бал

ЛАСТИВОСТІ

  1. Ім'я

  2. Порядковий номер

  3. Середній бал

Об’єкт: СТУДЕНТ

В

ВЛАСТИВОСТІ

  1. Ім’я

  2. Порядковий номер

  3. Середній бал

ЛАСТИВОСТІ

  1. Ім'я

  2. Порядковий номер

  3. Середній бал

Базовий клас

Базовий клас визначається таким чином (синтаксис):

class className

{

private:

< закриті елементи – дані > <закриті конструктори > <закриті функції-члени > protected:

<захищені елементи – дані > <захищені конструктори > <захищені функції-члени > public:

<відкриті елементи – дані > <відкриті конструктори > <відкрита деструкція > <відкриті функції – члени > };

Класи С++ мають три різні рівні доступу до своїх елементів - як до даних, так і до функцій:

Закриті (приватні) елементи - доступні лише для функцій класу

Захищені елементи - доступні лише для функцій класу та функцій

похідних класів.

Відкриті елементи - доступність для будь-якої зовнішньої функції.

До даних в закритому розділі мають доступ тільки функції-члени класу.

Класам-нащадкам заборонений доступ до закритих даних своїх базових класів.

До даних в захищеній секції мають доступ функції- члени класу і класів-нащадків. Дані з відкритої секції знаходяться в області видимості функцій-членів класу, функцій- членів класів-нащадків.

Існують наступні правила для розділів класу:

  • Розділи можуть з'являтися у будь-якому порядку.

  • Один і той же розділ можна визначати кілька разів.

  • Якщо не визначений жоден розділ, компілятор (за замовчуванням) оголошує всі елементи закритими.

С++ позволяє визначити в середині класу спеціальну функцію - член, яка автоматично викликається при створенні цього класу. Ця функція - клас називається конструктором та ініціалізує об'єкт, приводячи його в деяке необхідне початкове значення. Окрім конструктора в класі можна визначити деструктор, який буде викликатися при знищенні об'єкту.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]