Warum ist der Aufruf einer geschützten statischen Methode in abgeleiteten Klassen zulässig?C++

Programme in C++. Entwicklerforum
Anonymous
 Warum ist der Aufruf einer geschützten statischen Methode in abgeleiteten Klassen zulässig?

Post by Anonymous »

Das Aufrufen eines geschützten Konstruktors in einer abgeleiteten Klasse ist nicht zulässig, wie hier erläutert.

Die akzeptierte Antwort erklärt, dass protected nur dann Zugriff auf Mitglieder eines Objekts der Basisklasse A gewährt, wenn dieses Objekt der Klasse A ein Unterobjekt der Klasse B ist. So weit, so gut.

Aber warum ist es dann erlaubt (zumindest in GCC 4.6.3), statisch geschützte Methoden aufzurufen? Insbesondere ergibt es für mich keinen Sinn, dass das Folgende kompiliert wird, während dies in der kommentierten Zeile nicht der Fall ist:

Code: Select all

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
}
};
Philosophisch gesehen ähnelt ein Konstruktor einer statischen Methode, die ein Objekt der Klasse A zurückgibt, weshalb ich hier keinen Unterschied im Verhalten sehe.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post