Здравствуйте, biomorph, Вы писали:
B>Здравствуйте, Greg Zubankov, Вы писали:
GZ>>11.5/1 Protected member access
B>Спасибо за ссылку.
B>Жаль, что стандарт ничего не говорит о природе этого явления. Но по-моему, это не укладывается в правила контроля доступа. Получается, что при взятии адреса метода предка не учитываются привелегии наследника, но учитываются привелегии друзей.
B>Как-то логически можно объяснить этот пункт или его просто надо запомнить?
Природа такова, что к protected членам есть доступ только к базовой составляющей самого this. А не к другому объекту.
Т.е.
class A { protected : int a; };
class B : public A {
void foo() { this->a = 23; } // ok
void foo2 (A * other) { other->a = 23; } // error!
}
Имея указатель на функцию базового класса, мы смогли бы вызвать protected функцию
другого объекта, а это запрещено.