Объявления участников могут быть помечены access-specifier:
access-specifier : member-specificationopt
An access-specifier определяет правила доступа для членов, следующих за ним до конца класса или до тех пор, пока access-specifier не встретится другой . [ Example:
class X { int a; // X::a is private by default: class used public: int b; // X::b is public int c; // X::c is public };
— end example ]
Допускается любое количество спецификаторов доступа и никакого определенного порядка не требуется. [ Example:
struct S { int a; // S::a is public by default: struct used protected: int b; // S::b is protected private: int c; // S::c is private public: int d; // S::d is public };
— end example ]
[ Note: Влияние контроля доступа на порядок распределения элементов данных описано в [class.mem]. ] — end note
Когда член повторно объявляется в определении его класса, доступ, указанный при его повторном объявлении, должен быть таким же, как и при его первоначальном объявлении. [ Example:
struct S { class A; enum E : int; private: class A { }; // error: cannot change access enum E: int { e0 }; // error: cannot change access };
— end example ]
[ Note: В производном классе поиск имени базового класса найдет имя внедренного класса вместо имени базового класса в области, в которой он был объявлен. Имя внедренного класса может быть менее доступным, чем имя базового класса в области, в которой он был объявлен. ] — end note
[ Example:
class A { }; class B : private A { }; class C : public B { A* p; // error: injected-class-name A is inaccessible ::A* q; // OK };
— end example ]