Справочное руководство по C++
Шрифт:
• общим (public); это значит, что его имя можно использовать в любой функции.
Члены класса, описанного со служебным словом class, являются частными по определению. Члены класса, описанного со служебным словом struct или union, являются общими по определению, например:
R.11.1
Описания членов могут быть снабжены спецификацией доступа (§R.10):
Спецификация-доступа задает правила доступа к членам, которые действуют до конца жизни класса или пока не появится другая спецификация-доступа, например,
Допустимо любое число спецификаций доступа и задавать их можно в любом порядке, например,
Порядок размещения членов, представляющих данные, которые имеют разные спецификации-доступа, определяется реализацией (§R.9.2).
R.11.2 Спецификации доступа для базовых классов
Если класс описан как базовый (§R.10) по отношению к другому классу с помощью спецификации доступа public, то члены со спецификацией public или protected из базового класса являются соответственно членами с той же спецификацией для производного класса. Если класс описан как базовый по отношению к другому с помощью спецификации доступа private, то члены со спецификацией public или protected из базового класса являются членами со спецификацией private для производного класса. Частные члены базового класса остаются недоступными даже для производных классов, если только для обеспечения доступа при описании базового класса не было использовано описание friend.
Если для базового класса не указана спецификация-доступа, то для производного класса, если он описан как struct, предполагается спецификация public, а если он описан со служебным словом class, то - спецификация private, например:
Здесь класс является общим (public) базовым классом для D2, D4 и D6 и частным (private) базовым
Описание базового класса как private не влияет на доступ к статическим членам базового класса. Однако, если при обращении к статическому члену используется объект или указатель, который нужно преобразовывать, то действуют обычные правила преобразования указателей.
В функциях-членах или друзьях класса X можно X* неявно преобразовывать в указатель на частный класс, являющийся непосредственно базовым по отношению к X.
R.11.3 Описания доступа
Используя уточненное имя, можно установить доступ к члену базового класса в части public или protected описания производного класса. Это называется описанием доступа.
Приведем пример:
Во внешней функции ef можно использовать только имена c, e, и df. Поскольку функция df член класса D, в ней можно использовать имена b, c, bf, d, e и df, но не a. Функция bf - член класса B и в ней можно использовать члены a, b, c и bf.
Описания доступа не следует использовать для ограничения доступа к члену, доступному в базовом классе, также как не следует использовать его для обеспечения доступа к члену, который недоступен в базовом классе, например:
Описание доступа для имени перегруженной функции устанавливает доступ в базовом классе ко всем функциям с этим именем, например: