Sagen wir, ich habe diesen Code:Warum kann ich nicht auf ein geschütztes Mitglied von einer Instanz einer Basisklasse zugreifen?
class foo{
protected:
int a;
};
class bar : public foo {
public:
void copy_a_from_foo(foo& o){
a = o.a; // Error
}
void copy_a_from_bar(bar& o){
a = o.a; // OK
}
};
int main(){
bar x;
foo y;
bar z;
x.copy_a_from_foo(y);
x.copy_a_from_bar(z);
}
hier class bar
hat keine Probleme das geschützte Mitglied a
von einer anderen Instanz derselben Klasse zugreifen, aber wenn ich versuche, das gleiche mit einer Instanz der Basisklasse zu tun foo
, der Compiler gibt mir einen Fehler, der besagt, dass a
geschützt ist. Was sagt der Standard dazu?
Fehler sind
prog.cpp: In member function 'void bar::copy_a_from_foo(foo&)':
prog.cpp:3:7: error: 'int foo::a' is protected
int a;
^
prog.cpp:9:11: error: within this context
a = o.a;
P. S .: Ich auf this question einen Blick hatte, aber es ist nicht ganz das gleiche: Ich versuche, das geschützte Mitglied von innerhalb der abgeleiteten Klasse.
Gleiche wie http://stackoverflow.com/questions/3060572/c-protected-pointer-member-to -die-gleiche-Klasse-und-Zugriff-Privilegien? rq = 1 –
Die Bearbeitung wurde entfernt, da es sich bei der Frage nicht um den Compiler-Fehler handelt * per se *, geht es mehr um den Grundgedanken hinter der Regel "kann nicht auf geschütztes Mitglied zugreifen Basisklasse " –
@EugeneK-Nr. Ich weiß, dass ich von der Basisklasse aus nicht auf ein geschütztes Mitglied zugreifen kann. Meine Frage ist warum ich nicht kann. –