Читать «Справочное руководство по C++» онлайн - страница 62

Бьярн Страустрап

Инициализатор-ctor (§R.12.6.2) вычисляется в области видимости наибольшего блока конструктора, для которого он задан. В частности, в нем можно использовать имена формальных параметров.

R.11 Контроль доступа к членам

Член класса может быть:

• частным (private); это значит, что его имя можно использовать только в функциях-членах и друзьях класса, в котором он описан;

• защищенным (protected); это значит, что его имя можно использовать только в функциях-членах и друзьях класса, в котором он описан, а также в функциях-членах и друзьях классов, являющихся производными по отношению к этому классу (см. §R.11.5);

• общим (public); это значит, что его имя можно использовать в любой функции.

Члены класса, описанного со служебным словом class, являются частными по определению. Члены класса, описанного со служебным словом struct или union, являются общими по определению, например:

class X {

 int; // X:: частный по определению

};

struct S {

 int a; // S::a общий по определению

};

R.11.1 Спецификации доступа

Описания членов могут быть снабжены спецификацией доступа (§R.10):

спецификация-доступа: список-членов opt

Спецификация-доступа задает правила доступа к членам, которые действуют до конца жизни класса или пока не появится другая спецификация-доступа, например,

class X {

 int a; // X::a частный по определению: учитывается 'class'

public:

 int b; // X::b общий

 int c; // X::c общий

};

Допустимо любое число спецификаций доступа и задавать их можно в любом порядке, например,

struct S {

 int a; // S::a общий по определению: учитывается `struct'

protected:

 int b; // S::b защищенный

private:

 int c; // S::c частный

public:

 int d; // S:: d общий

};

Порядок размещения членов, представляющих данные, которые имеют разные спецификации-доступа, определяется реализацией (§R.9.2).

R.11.2 Спецификации доступа для базовых классов

Если класс описан как базовый (§R.10) по отношению к другому классу с помощью спецификации доступа public, то члены со спецификацией public или protected из базового класса являются соответственно членами с той же спецификацией для производного класса. Если класс описан как базовый по отношению к другому с помощью спецификации доступа private, то члены со спецификацией public или protected из базового класса являются членами со спецификацией private для производного класса. Частные члены базового класса остаются недоступными даже для производных классов, если только для обеспечения доступа при описании базового класса не было использовано описание friend.

Если для базового класса не указана спецификация-доступа, то для производного класса, если он описан как struct, предполагается спецификация public, а если он описан со служебным словом class, то - спецификация private, например: