Void Time::Display (void)

{printf ("year=%d month=%d day=%d hour=%d\

minute=%d \n",p->year,p->month,p->day,\

p->hour,p->minute);}

Тоді при звертанні типу tt1.day компілятор видасть повідомлення про помилку.

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

Припустимо, що ми написали велику кількість функцій, які працюють із полями структури Time. Згідно із цією структурою дата визначається так: рік, місяць, день, година, хвилина.

Однак дату можна зберігати й у секундах, використовуючи змінну типу long. Уявімо собі, скільки змін потрібно внести в програму, щоб реалізувати цю ідею, адже потрібно змінювати всі функції типу Display, усі оператори, які звертаються до полів. У випадку ж закритих даних змінити доведеться лише функції-члени структури, які працюють із закритими даними. Усе інше може залишитися без змін! Більше того, можна взагалі писати програму, визначаючи спочатку функціональний інтерфейс, і лише на останньому кроці визначати внутрішню структуру закритих даних. Обмеженість впливу даних на код є однією із суттєвих особливостей ООП.

Зазначимо, що структури та класи в С++ мають лише незначні відмінності у властивостях. Їх можна розглядати як синтаксично допустимий спосіб утворення типів даних користувача. У С++ ім'я структури чи класу – це тип даних. Якщо, наприклад, в ANSI C ми хочемо оголосити змінну типу struct Time, то можемо написати оголошення struct Time a;. Тут обов'язковим є ключове слово struct. У С++ слово struct не обов'язкове. Допускається еквівалентне оголошення типу Time а;. Для такого оголошення в ANSI C потрібно використовувати засіб typedef:

typedef struct Time {…};

Time a;

Опис протоколу класу

Розглянемо нові типи даних, що задаються за допомогою ключового слова class. Опис класу майже нічим не відрізняється від опису структури. У структурі Time з підрозд. 7.2 ми могли б описати аналогічний клас Time у такий спосіб:

class Timer {

private:

int year;

int month;

int day;

int hour;

int minute;

public:

void Display (void);};


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: