logo
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

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; // недопустимо

}