Re[3]: указатель на метод базового класса и права доступа
От: VoidEx  
Дата: 17.10.06 13:59
Оценка: 3 (2)
Здравствуйте, 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 функцию другого объекта, а это запрещено.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.