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

1.3.2. Загальнодоступні і приватні члени класу

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

Приклад:

class Rut

{

long value;

void f();

};

void main()

{

Rut ob; //створення об’єкта Rut

long а = ob. value; //помилка доступу

ob. f(); //помилка доступу

}

Специфікатор public забезпечує доступ до полів і методів.

Приклад:

class M

{

public:

int variable;

void f();

};

void M::f(){} //нічого не робить

void main()

{

M c;

int i = c. variable; //все вірно

c. f(); //все вірно

}

Приклад: У цьому прикладі описується клас, який описує сферу

#include <iostream>

using namespace std;

#define M_PI 3.14159265358979323846

class Sf

{

float r;

public:

float x, y, z;

Sf(float xc, float yc, float zc, float rk)

{

x = xc; y = yc; z = zc; r = rk;

}

~Sf(){}

float Get_r();

float cub()

{

return (r*r*r*4/3*M_PI);

}

float kv();

};

inline float Sf::kv()

{

return(4*M_PI*r*r);

}

float Sf::Get_r()

{

return r;

}

void main()

{

Sf S(1.0, 2.0, 3.0, 4.0);

cout << S. kv() << "\n" << S.Get_r();

}

//Виведення:

//201.062

//4.0

В даному прикладі обчислюється об'єм і площа кулі з використанням відповідних вбудованих функцій kv() і cub(). Доступ до елементів об'єкту можливий, якщо вони мають специфікатор public. Отримати або змінити значення елементів із специфікатором private можна тільки через звернення до відповідних методів. У нашому випадку функція Get_r() повертає значення змінної r (радіусу кулі), що має специфікатор доступу private. Функція Sf – функція конструктор має таке ж ім’я як і клас, використовується для одночасного створення й ініціалізації змінних класу. Ця функція не повертає значень.

Деструктор також має ім’я класу, але містить перед ім’ям тильду (~). Функція-деструктор не приймає аргументів і не повертає значень. У нашому прикладі функція ~Sf () нічого не робить, що характерно для більшості деструкторів. Їхнє основне призначення – звільнення пам’яті, що була виділена для об’єкта класу. Деструктор може виконувати й інші дії, наприклад, такі як виведення останніх значень даних-членів класу. Це зручно при налагодженні. Якщо функція-деструктор не робить ніяких дій, то немає потреби її створювати. Як тільки змінна типу клас перестає існувати, виділена для об’єкта пам’ять повертається системі. Аналогічно, якщо конструктор не виконує ніяких дій, то немає потреби його створювати.

1.3.3. Захищені члени класу

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

Розглянемо ієрархію об’єктів, приведених на рис. 1.

Ієрархія, подана на рисунку1 може бути виражена таким кодом:

class A

{

protected:

int val;

};

class B: public A

{

public:

void FB();

};

class C: public B

{

public:

void FC();

};

Рис. 1. Ієрархія класів.

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