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
}
};
Mobile version