R
Справочное
руководство по С++
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; // недопустимо
}