auf private Elemente einer Verwandte/gleiche Klasse zugreifen??



  • 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 objekten

    Genau 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


Anmelden zum Antworten