Принятый ответ объясняет, что protected предоставляет доступ к членам объекта базового класса A только тогда, когда этот объект класса A является подобъектом класса B. Пока все хорошо.
Но тогда почему разрешено (по крайней мере, в GCC 4.6.3) вызывать статические защищенные методы? В частности, для меня не имеет никакого смысла, что следующее компилируется, а закомментированная строка - нет:
Код: Выделить всё
class A
{
protected:
A() {}
static A makeA() { return A(); }
};
class B: public A
{
public:
static A makeAFromB()
{
return makeA(); // compiles
// return A(); // does not compile
}
};
Подробнее здесь: https://stackoverflow.com/questions/169 ... es-allowed
Мобильная версия