auf private Elemente einer Verwandte/gleiche Klasse zugreifen??
-
nochmal:
class XXX{ private: int m_i; XXX(const XX &scr){ scr.m_i = 8; //Kein Zugriffsfehler } void func1(const XXX& scr){ scr.m_i = 8;//Zugriffsfehler } void func(XXX& scr){ scr.m_i = 8;//kein Zugriffsfehler } void func3(XXX scr){ scr.m_i = 8;//kein Zugriffsfehler } void func4(const XXX& scr){ this->m_i = scr.m_i;//kein Zugriffsfehler } };Aber: schcik dch mal den genauen code und v.a. die entsprechende Fehlermeldung
-
Was heißt denn "Zugriffsfehler" überhaupt?
-
najabei mir kommt aber einer:
class Base { protected: int m_iBase; }; class Sub : public Base{ void func(const Base &X){ int h= Base.m_iBase; //Zugriffsfehelr } };@MFK: Cannot access Protected member in Base.... etc.
-
da "m_i" proteced in Base ist und somit private für alle mit "public Base" abgeleitete Klassen. Allerdings ist man imme rnur autom friend "derselben" klasse.
siehe:
class Base{ protected: int m_iBase; static int s_iBase; }; class Sub : public Base{ public: void func0(const Base &X){ cout<<X.m_iBase<<endl; } //->Fehler void func1(const Sub &X){ cout<<X.m_iBase<<endl; } //->funktioniert void func2(const Base &X){ cout<<Base::s_iBase<<endl; } //->funktioniert void func3(const Sub &X){ cout<<Sub::s_iBase<<endl; } //->funktioniert };
-
class Base { protected: int m_iBase; }; class Sub : public Base{ }; class Sub2 : public Sub{ void func(const Base &X){ int h= Base.m_iBase; //Zugriffsfehelr } };aha.. und wenn so aussieht???
-
dann hast du auf m_iBase in Sub2 keinen Zugriffsrechte. und musst getter und setter methoden verwenden
-
oh man.. daher spielt die musik.. sowas dachte ich mir
danke;)
-
ABER STOP:
class AAA{ protected: int m_iAAA; public: AAA(void); ~AAA(void); }; class BBB : public AAA{ void test(const AAA& obj){ int h= obj.m_iAAA; // (1) } };(1) : c:\test\hierachietest\AAA.h(15): error C2248: 'AAA::m_iAAA' : cannot access protected member declared in class 'AAA'
-
Man kann nur auf protected-Member der Basisklasse zugreifen, wenn diese sich im eigenen Objekt befinden. Nicht, wenn das irgendeine fremde Instanz ist.
-
genau. habe oben den beitrag angepaßt und das bsp erweitert.
"friend"s sind nur Objekte "derselben" klasse. du kannst also von Sub nur autom auf private (inclusiver der vererbten) der basisklasse zugreifen.
aber nicht auf protected member von Basisklassen objekten
-
pumuckl schrieb:
BorisDieKlinge schrieb:
class Sub2 : public Sub{ void func(const Base &X){ int h= Base.m_iBase; //Zugriffsfehelr //MOOOMENT!!! } };du greifst hier auf Base.m_iBase zu - was ein etwas unsinniges Konstrukt ist. versuchs mal mit
int h = X.m_iBase;muffmolch schrieb:
du kannst also von Sub nur autom auf private (inclusiver der vererbten) der basisklasse zugreifen.
aber nicht auf protected member von Basisklassen objektenGenau andersrum. Private Member sind nur fuer die Klasse selbst sichtbar, nicht aber fuer die erbenden Klassen. Protected Member sind wiederum fuer die Klasse selbst und alle (public oder protected) erbenden Klassen sichtbar. Mal abgesehen von Friends und nachtraeglichen Veraenderungen der Zugriffsspezifizierer in den erbenden Klassen.
-
MFK schrieb:
Was heißt denn "Zugriffsfehler" überhaupt?
Access Violation