Klasse greift auf Klasse zu



  • hi,

    Kann man mit einer Klasse auf die protected/private Funktionen einer anderen Klasse zugreifen? Wenn ja, wie?

    Danke im voraus



  • Kann man mit einer Klasse auf die protected/private Funktionen einer anderen Klasse zugreifen?

    Nein. Klassen sind in C++ völlig tot. Sind sind nur statische Beschreibungen. Leben existiert erst im Zusammenhang mit Objekten (also Instanzen von Klassen).

    Nach dem das gesagt ist lautet eine Antwort:
    Das kommt drauf an. Generell nicht. Objekte abgeleiteter und befreundeter Klassen dürfen allerdings auf protected-Elemente zugreifen. Objekte befreundeter Klassen können zusätzlich auch noch auf private-Elemente zugreifen.



  • Was sind befreundete Klassen?
    Wie geht so was?



  • Ich scheine das richtige gefunden zu haben: "friend"!
    Danke nochmals



  • man kann sehr wohl auf private/protected Elemente anderer Klassen zugreifen, auch ohne Vererbung und ohne friend-DEklarationen, der Schlüssel liegt ganz allein in speziellen "get-methoden" und der Einbettung. Dazu musst du allerdings in der Klasse, die auf die andere Zugreifen muss, einen Datentyp der Klasse selber in der anderen machen, dies nennt man Einbettung:

    nehmen wir mal an du willst auf diese Klasse zugreifen (ich füge die get-Methoden direkt hinzu):

    class CTest 
    {
        public:
            //dies sind die Methoden, die den Zugriff auf die privaten Elemente gestatten
            int getValue ();
            float getV ();
            char getX ();
    
            CTest ();   //Konstruktor
            ~CTest ();  //Destruktor
        private:
            //dies hier sind die privaten Elemente, auf die zugegriffen werden soll
            int value;
            float v;
            char x;
    
        protected:
    };
    
    float CTest::getV ()
    {
        return v;
    }
    
    int CTest::getValue ()
    {
        return value;
    }
    
    char CTest::getX ()
    {
        return x;
    }
    
    class CZugriff
    {
        public:
            CTest zugriff; 
            CZugriff ();
        private:
            int x;
            float f;
            char z;
        protected:
    };
    
    CZugriff::CZugriff ()
    {
    
        x = zugriff.getValue ();
        f = zugriff.getV ();
        z = zugriff.getX ();
    
    }
    

    Erklärung: Die get-Methoden tuen nix anderes, als die privaten Elemente zurückzuliefern. Sie können das, weil sie selbst zugriff auf die privaten Elemente haben, sie sind ja schliesslich ganz normale Mitglieder der Klasse und haben auf alle Elemente der Klasse vollen Zugriff. return bestimmt einen Rückgabewert, d.h. das return kann abgefangen werden und somit können die Variablen gelesen werden, allerdings nicht geschrieben, dafür gibt es spezielle setMethoden. Um Zugang auf die Methoden zu haben (die private sein müssen) muss in der Klasse, die zugriff auf die andere Klasse haben will, ein Objekt der Klasse erstellt werden. Man könnte auch einen Zeiger auf das Objekt einrichten und über den Zeiger an die Methoden kommen, kannst du ja auch mal ausprobieren.
    Nunja auf jedenfall siehst du das du so zugriff auf bestimmte private Elemente bekommst.


Anmelden zum Antworten