Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

Тіло класу

Перемінна count у розглянутому прикладі оголошена усередині класу. Таким чином, count - це перемінна-член класу. Будь-яка перемінна, визначена в класі, має область видимості класу. Область видимості перемінноої-члена простирається від міста її оголошення в класі до кінця оголошення класу.

У С++ дані і функції-члени, оголошені усередині класу, не містять специфікацію класу пам'яті (крім static) і лексично належать області дії даного класу.

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

Клас Counter містить оголошення функцій SetValue ( ) і GetValue ( ), що називаються функціями-членами класу. Ці функції поки не визначені, вони тільки оголошені. Як і інші функції в С++, функції-члени повинні бути оголошені до використання. Оголошення повинне бути повним, включаючи тип значення, що повертається, і типи аргументів.

Приклад

void Counter :: Setvalue (long value)

{

count = value; // Зміна значення

// перемінної-члена класу count

}

long Counter :: GetValue (void)

{

return count; // Повернути

// значення даного-члена count

}

При визначенні функції-члена після типу значення, що повертається, указується, членом якого класу є функція. Для цього потрібно написати ім'я класу і поставити за ним дві двокрапки (::) оператор дозволу області видимості.

Визначення функцій для класу Counter звичайно здійснюється в інших модулях. Формат визначення функції-члена класу має винляд

<Тип_значення_що_повертається> <Ім'я_класу> :: <Ім'я_функції> (<Оголошення_ параметрів>) { <Тіло_функції> }

Доступ до членів класу в загальному випадку здійснюється за допомогою нотації

<Ім'я_об'єкта> . <Ім'я_члена_класу>

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

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

Приклади:

struct outer //Структура типу outer, всі члени доступні (public)

{ typedef int tint; // Оголошення типу outer :: tint - це синонім типу int

struct inner // Вирази outer ::inner - це вкладена структура

{ static int x; …}; // Статична перемінна (член) структури типу inner

tint y;

int f( ); // Функція-член структури типу outer.

}

int outer :: f( ) // Визначення функції-члена структури типу outer

{ tint y1 = х; // х – тут доступний, тому що функції-члени

return у1; // мають доступ до даних-членів класу (структури)

}

outer :: inner :: x = 5; // Визначення статичного даного-члену класу outer

outer :: tint у5 = 2; // Визначення перемінної типу outer :: tint у програмі

Доступ до статичного даного-члена класу здійснюється за допомогою імені класу (outer :: inner ::), а не за допомогою імені об'єкта класу.

Використання класу

Для того щоб використовувати клас, потрібно оголосити (створити) об'єкт цього класу. Об'єкти класу визначаються так само, як структурні чи скалярні перемінні. Оголошення класу повинне бути розташоване до використання класу. Користувачу надається опис класу, але не обов'язково його внутрішня реалізація. Щоб оголосити перемінну (об'єкт) people класу (типу) Counter, використовується наступний запис

Counter people; // Аналогічно оголошенню будь-якої перемінної int a;

Counter *ptr; // Аналогічно int *p;

Для виклику функції-члена класу для об'єкта використовується той же запис, що і для звертання до елемента структури: за крапкою вказують ім'я елемента people.GetValue( ). Аналогічний виклик функції і при використанні покажчиків ptr -> GetValue( ). В іншому використання функцій-членів нічим не відрізняється від використання традиційних функцій С.