P
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.