fy"> УПРАВЛІННЯ ДОСТУП ДО КЛАСУ
Для обмеження рівня доступу до даних і функцій-членів класу в С + + існують три ключових слова private: (приватний), protected: (захищений), public: (загальнодоступний), що задають рівні доступу в класі . Кожен розділ у класі починається з одного з наведених слів. Якщо ні одне з ключових слів не використовувалося, то всі оголошення в класі вважаються приватними. Розділи з різними привілеями доступу можуть з'являтися в будь-якому порядку і в будь-якій кількості. Розглянемо прімер.Example {x1;// приватні за умолчаніюf1 ();
protected: x2;// защіщенниеf2 ();: x3;// знову частниеf3 ();:
int x4;// загальнодоступні
inf f4 ();
};
Приватні члени класу
Приватні члени класу мають найбільш обмежений доступ. До приватних членам класу мають доступ тільки функції-члени даного класу або класи та функції оголошені як дружні (friend) до даного класу, наприклад:
class TPrivateClass {value; GetValue ();
};
TPrivateClass :: GetValue () {value;// доступ дозволено
} main () {cl;// створення об'ектаi = cl.value;// помилка! Немає доступу = cl.GetValue () ;//помилка! Немає доступу
}
Захищені члени класу
Члени та функції оголошені в захищеному (protected) розділі класу доступні тільки для функцій похідних класів. Зазвичай в цьому виникає необхідність тоді, коли розробляється клас є базовим класом для інших класів. У цьому випадку він обмежує доступ до даних зовнішнім користувачам і дозволяє доступ для класів спадкоємців. Розглянемо приклад ієрархії об'єктів:
class A {
protected:
int val;
};
class B: public A {//успадковується від A:
void fb ();
};
void B :: fb () {val = 0;}// доступ дозволено
C: public B {//успадковується від B: fc ();
}; C :: fc () {val = 10;}// доступ дозволено
У даному прикладі наведена ієрархія класів A-> B-> C. Властивість захищеності поширюється вниз по ієрархії до тих пір поки похідний клас оголошує свій базовий загальнодоступним (public). При цьому будь-які функції-члени у класах C і B мають доступ до члена даних val базового класу. Якщо функція-член похідного класу в якості вхідного параметра має покажчик або посилання на об'єкт базового класу, то правила стають іншими. Модифікуємо клас C таким чином: C: public B {: fc (A &);// Вхідний параметр посилання на базовий клас
}; C :: fc (A & a) {= 10;// доступ разрешен.val = 10;// помилка! порушення прав д...