Почему разрешен вызов защищенного статического метода в производных классах?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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