Контроль доступа
Член класса может быть частным (private), защищенным (protected) или общим (public):
- Частный член класса X могут использовать только функции-члены и друзья класса X.
- Защищенный член класса X могут использовать только функции-члены и друзья класса X, а так же функции-члены и друзья всех производных от X классов.
- Общий член можно использовать в любой функции.
Эти правила соответствуют делению обращающихся к классу функций на три вида: функции, реализующие класс (его друзья и члены), функции, реализующие производный класс (друзья и члены производного класса) и все остальные функции.
Контроль доступа применяется единообразно ко всем именам. На контроль доступа не влияет, какую именно сущность обозначает имя. Это означает, что частными могут быть функции-члены, константы и т.д. наравне с частными членами, представляющими данные:
class X { private: enum { A, B }; void f(int); int a; };
void X::f(int i) { if (i<A) f(i+B); a++; }
void g(X& x) { int i = X::A; // ошибка: X::A частный член x.f(2); // ошибка: X::f частный член x.a++; // ошибка: X::a частный член }