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);}

Що ж ми отримали? Зробивши функцію членом структури, ми не здобули нових можливостей. Адже будь-яка зовнішня функція має віль­ний доступ до полів даних структури (через операцію "."). Усе те, що можна робити з даними за допомогою функції-члена структури, можна робити й за допомогою зовнішніх функцій. Проте в семантичному плані це є безсумнівним досягненням. Об'єднання даних і функцій, що працюють з ними в одній структурі – це приклад інкапсуляції.

Функція-член структури стає ніби властивістю структури. Що ж це за структура, що має якісь властивості? Де її можна використовувати? Очевидно, що такі структури могли б бути корисними для моделювання реальних природних об'єктів. У нашому випадку, наприклад, структура Time з функцією-членом Display може служити моделлю годинника (об'єкта, при звертанні до якого ми отримуємо інформацію про час і дату). Однак очевидно, що природні об'єкти мають дані, приховані від певних зовнішніх об'єктів.

Наприклад, спостерігаючи за літаком, можна визначити його швидкість, висоту, тип, але не можна ззовні визначити, скільки в нього залишилося пального й боєприпасів. Звідси випливає, що деякі поля даних мають бути закритими. Звертання до цих полів за допомогою операції ". " синтаксично недопустиме. Виходячи з поняття інкапсуляції, приходимо до концепції закритих полів даних. У С++ існують спеціальні службові слова – специфікатори доступу: public, protected та private. Дані, розміщені в розділах protected та private, стають доступними лише для функцій-членів і недоступними для зовнішніх функцій. Доступ до них може здійснюватися лише за допомогою функцій, описаних у відкритому розділі.

Оголосимо поля даних закритими:

struct Time {

private:

int year;

int month;

int day;

int hour;

int minute;

public:

void Display (void);} tt1;


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



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