Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
slaid_5_portal_2011.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.41 Mб
Скачать

Визначувані типи

Часто буває, що наперед визначених типів для опису об'єктів у програмі недостатньо. Тоді використовується механізм визначення типів.

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

Тому визначувані типи грають дуже важливу роль у програмуванні і особливо це стосується абстрактних типів даних.

Опис визначуваного типу

Загальна форма опису визначуваного типу має вигляд:

type d = T;

де

d – позначення визначуваного типу (індикатор типу),

Т – опис властивостей визначуваного типу.

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

Класифікація відомих визначуваних типів

Використання визначуваного типу

Усі визначувані типи можна використовувати двома способами: анонімно або явно.

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

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

Підтипи

Підтип (sybtype) – це нове позначення батьківського типу та пов'язане з ним уточнення.

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

Наприклад, для типу integer це може бути перелічування значень (2, 3, 5, 7) або значення дискретного діапазону значень – як 1..100.

Операції і зображення значень підтип успадковує від батьківського типу.

Pascal:

type

MyInteger = integer;

Days = 0..6;

var

nMyDays : Days;

nУourDays : Days;

nb : MyInteger;

begin

nb := 3;

nУourDays := nb;

nMyDays := nУourDays;

end.

Перелічувані типи. 1

Визначувані типи, повний набір значень яких явно перелічують в опису типу, називаються перелічуваними (enumeration type).

Значення в опису типу називається літералом перелічуваного типу. Кожний літерал у перелічуваному типі виробляє відмінне від інших літералів значення.

Наперед визначені операції відношення впорядкованості між літералами слідують порядку, що відповідає номерам їхніх позицій у переліку. Номер позиції першого літерала, а часто і його значення дорівнюють нулю, наступного – на одиницю більше і так далі.

Перелічувані типи. 2

У мовах Pascal і С значення літералів перелічуваного типу належать значенням цілого типу. Як позначення літерала перелічуваного типу в обох мовах використовується ідентифікатор.

У мові С можна встановлювати значення для літерала перелічуваного типу за допомогою R-виразу. Тоді значення наступного літерала в уточненні за замовчуванням дорівнюватиме значенню R-виразу, збільшеному на одиницю. Для різних літералів в мові С може бути призначено однакові значення, які можуть бути й від’ємними.

Pascal:

type numb = (One, two, five, six);

const MyNumb : numb = two;

var

color : (black, red, yellow);

nI : integer;

begin

MyNumb := five;

nI := integer(MyNumb);

color := red;

nI := integer(MyNumb) + integer(color);

color := MyNumb; {ошибка!}

end.

С:

enum numb {one, two, five = 5, six};

numb MyNumb;

MyNumb = two;

MyNumb = numb(int(two) + 5);

MyNumb = 10; //ошибка

MyNumb = numb(int(two) - int(one));

enum {FALSE, TRUE};

if (nI == FALSE)

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