Програмування С, С++теорія та практика (частина 2)
2.5.1 Протокол опису класу
Протокол опису класу - опис ідентифікатору класу (типу) із вказівкою елементів-даних (тетеЬег іїаіа) та повідомлень або елементів-функцій (тетеЬег/ипєґіоп), які об’єкт обробляє. Елементи- дані - це такі ж звичайні змінні, як елементи структури, елементи- функції - це функції, визначені в рамках класу, що можуть працювати лише з елементами-даними цього класу. Усі оголошення даних та повідомлень повинні знаходитися всередині протоколу класу (оголошення):
Синтаксис:
СІ855 <ім'я> {
[ ргіуаїе : ]
[ <опис прихованих елементів> ]
[ ргоїесїеС :
<опис захищених елементів> ]
[ риЬІіс :
<опис доступних елементів> ]
};
Приклад опису класу роіпі (представлення точки на площині) за допомогою іігисі : з'Ьгис'Ь роіп£
{ // опис класу за допомогою зЬгисЬ
рг^а^е: / / специфікатор доступу
іп£ х,у; // приховані елементи-дані
риЬ1іс: / / специфікатор доступу
VОій. зе^х(іп^ х);// далі-відкриті елементи-функції VОій. зе£у (іп£ у) ; іп£ де£х() ; іп£ де£у () ;
};
Наведемо приклад опису класу за допомогою сіам :
сіазз Ііпе {
// по замовчанню - рг^а^е елементи іп£ х1, у1, х2, у2;
риЬІіс:
Ііпе(іпї х1,іп£ у1,іп£ х2,іп£ у2);
Vоій. зЬом () ;
~1іпе () ;
} ;
В даному прикладі оголошується клас для представлення відрізка на площині. В цьому класі передбачено чотири приховані елементи- змінні х1,у1,х2,у2, конструктор Ііпе(іпі х1,іпі у1,іпі х2,іпі у2); , деструктор ~1іпе() та метод уоій 8коч>();.
Будь-яка змінна, оголошена (визначена) у класі, має область видимості класу (сІам хсоре), що простягається з місця її опису до закінчення протокольного опису класу. Даними-членами класу можуть бути змінні будь-якого типу, включаючи інші класи, покажчики на типи об’єктів класів тощо. Проте існують обмеження на використання елементів-даних.
Елементи-дані :
1. можуть мати будь-який тип, окрім типу цього ж класу (але можуть бути покажчиками або посиланнями на цей клас);
2. можуть бути описані з модифікатором соті, при цьому вони ініціалізуються тільки один раз (за допомогою конструктора) і не можуть змінюватися;
3. можуть бути описаними з модифікатором ьіаііс, але не як аиіо, ехіегп і гедіаіег;
4. ініціалізація полів при описі не допускається.
Функції, описані (або визначені) у протоколі класу, носять назву функцій-членів (елементів-функціи), щоб відрізняти їх від звичайних зовнішніх “некласових” функцій. Визначення функцій-членів може знаходитися як всередині протоколу, так і поза оголошенням класу (у цьому або іншому файлі). Функції-члени, визначені у класі, виглядають як звичайний опис без попереднього оголошення їх прототипу.
Приклад 1 (визначення функцій-членів в протоколі опису класу): с1азз 1іпе {
іп£ х1, у1, х2, у2; риЬ1іс:
1іпе(іп£ _х1,іп£ _у1,іп£ _х2,іп£ _у2)
{
х1=_х1; у1=_у1; х2=_х2; у2=_у2;
}
VОІЙ зЬом()
{
}
~1іпе ()
{
}
};
Функції-члени, визначені таким чином, є по замовчуванню іпііпе- функціями, так як здебільшого вони невеликого розміру та найчастіше не містять в собі циклів. Для попередження можливої нечитабельності протоколу класу та при використанні функцій великого розміру більш раціонально розміщувати їх визначення в іншому місці (поза протоколом, у цьому або ж іншому файлі). При цьому слід обов’язково вказати прототип функції у протокольній частині.
Приклад 2 :
//1іпе.Ь с1азз 1іпе {
іп£ х1, у1, х2, у2; риЬ1іс:
1іпе(іп£ _х1, іп£ _у1, іп^ _х2, іп£ _у2);
VОій зЬом();
VОій тоVе(іп^ х,іп£ у);
~1іпе () ;
};
// 1іпе.срр #іпс1ийе "1іпе.Ь"
1іпе::1іпе(іп£ _х1,іп£ _у1,іп£ _х2,іп£ _у2)
{
х1=_х1; у1=_у1; х2=_х2; у2=_у2;
VОіС 1іпе::тоVе(іп■Ь х,іп£ у)
{
х1+=х;
у1+=у;
х2+=х;
у2+=у;
}
З вищенаведеного прикладу 1 випливає, що немає необхідності включати ім’я класу в ім’я елемента-функції при визначенні її у протокольній частині опису класу. Однак треба визнати, що поза протоколом така вказівка обов’язкова (див. приклад 2) - тут ми застосовуємо операцію розв’язання видимості :: (зсоре гезоіиііоп орегаіог), вказуючи належність до конкретного класу (наприклад, уоій ііпе::тоуе(іпі х, іпі у) ). Функція тоуе(іпі х, іпі у) без імені класу буде звичайною зовнішньою функцією. До речі, вона може бути описана як зовнішня і таким чином - ::тоуе(іпі х, іпі у), коли є декілька функцій з однаковими іменами, як у наступному випадку:
//визначення зовнішньої функції тоVе()
VОІС тоVе(іп■Ь х, іп£ у) {
// ...
}
с1азз 1іпе {
іп£ х1, у1, х2, у2; риЬ1іс:
// визначення функції класу тоVе()
VОІС^ тОVе(Іп■Ь х,іп£ у) {
// ...
}
VОІС зе^(іп^ х, іп£ у) {
тоVе(x,у); // 1іпе::тоVе(x,у)
::тоVе(x,у); // зовнішня ::тоVе(x,у);
}
};
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
Схожі підручники
- Загальні питання з курсу Основи охорони праці
- Структура кредитного портфелю українських банків, недоліки та перспективи покращення
- ТЕОРІЯ КРЕДИТУ. СУТНІСТЬ І ФУНКЦІЇ КРЕДИТУ
- РЕАЛЬНІ ІНВЕСТИЦІЇ
- Соціальна педагогіка (частина 3)
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн
