R.11.5 Доступ к защищенным членам

R.11.5 Доступ к защищенным членам

Друг или функция-член производного класса имеет доступ к защищенному статическому члену базового класса. Друг или функция-член производного класса могут получить доступ к защищенному нестатическому члену одного из своих базовых классов только через указатель, ссылку или объект производного класса (или любого класса, являющегося производным по отношению к нему). Рассмотрим пример:

class B {

protected:

 int i;

};

class D1: public B {

};

class D2: public B {

 friend void fr(B*, D1*, D2*);

 void mem(B*, D1*);

};

void fr(B* pb, D1* p1, D2* p2)

{

 pb-›i = 1; // недопустимо

 p1-›i = 2; // недопустимо

 p2-›i = 3; // нормально (обращение через D2)

}

void D2::mem(B* pb, D1* p1)

{

 pb-›i = 1; // недопустимо

 p1-›i = 2; // недопустимо

 i = 3; // нормально (обращение через this)

}

void g(B* pb, D1* p1, D2* p2)

{

 pb-›i = 1; // недопустимо

 p1-›i = 2; // недопустимо

 p2-›i = 3; // недопустимо

}