Почему разрешен вызов защищенного статического метода в производных классах?C++

Программы на C++. Форум разработчиков
Anonymous
Почему разрешен вызов защищенного статического метода в производных классах?

Сообщение Anonymous »

Вызов защищенного конструктора в производном классе не разрешен, как описано здесь.

Принятый ответ объясняет, что 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
}
};
Философски конструктор во многом похож на статический метод, возвращающий объект класса A, поэтому я не вижу здесь разницы в поведении.

Подробнее здесь: https://stackoverflow.com/questions/169 ... es-allowed

Вернуться в «C++»