Adresse einer deklarieren Variable in public auslesen



  • Hallo alle zusammen

    Habe mir in den letzten Monaten die Sprache C und C++ reingezogen. Eher gelernt als jetzt groß angewendet.

    Und da kam mir letztens folgende Frage:

    Ich lege im privat Bereich einer Klasse eine Variable an und instantiiere diese Klasse zu einem Objekt. Und finde irgendwie, wenn das möglich ist, die Adresse dieser Variablen wo deren Speicher ist heraus. Wenn ich diese Adresse dann an einen Zeiger übergebe, könnte ich Mittels Zeiger dann auf diese Variable extern zugreifen?

    Als Neuling weiß ich natürlich nicht wie eine Klasse auf dem Computer angelegt wird, wie private, public und protected auf dem Speicher funktioniert und wie Zeiger auf einem Speicher angelegt werden. Die Funktion habe ich schon verstanden, nehme ich mal an 😃

    Okay und wenn dass dann geht, wie könnte man dann die Adresse eventuell herausfinden?

    Gruß arturkb 😃



  • #include <iostream>
    
    using namespace std;
    
    class test {
    public:
    	test(int val): v(val) { }
    	int* get() { return &v; }
    private:
    	int v;
    };
    
    int main()
    {
    	test test(4);
    	int* p = test.get();
    	*p = 5;
    	cout << *(test.get()) << endl;
    	cin.get();
    }
    

    Also es geht schon, nur ist es generell keine gute Idee, dem Benutzer einer Klasse die Möglichkeit zu geben auf private Member zuzugreifen.

    bnz



  • private ist nicht als Schutz vor Hacker gedacht. private ist zum Schutz des Programmierers da.

    Wenn Programmierer A etwas in einer Klasse private macht, das von Programmierer B benutzt werden soll, dann heisst das für Programmierer B: "Das fasse besser nicht an. Vielleicht wird das nicht so benutzt, wie ich denke".
    Wenn Programmierer B trotzdem darauf zugreifen will, kann er einfach aus private public machen. Nur ist er dann auch der Doofe, wenn Programmierer A etwas an dem private ändert (z.B. die Variable entfernt).

    Auf den Speicher hat private keine Auswirkung. Er wird dadurch nicht geschützt.



  • arti schrieb:

    Habe mir in den letzten Monaten die Sprachen C und C++ reingezogen.

    FTFY.

    Ich lege im privat Bereich einer Klasse eine Variable an und instantiiere diese Klasse zu einem Objekt. Und finde irgendwie, wenn das möglich ist, die Adresse dieser Variablen wo deren Speicher ist heraus. Wenn ich diese Adresse dann an einen Zeiger übergebe, könnte ich Mittels Zeiger dann auf diese Variable extern zugreifen?

    Ja, natürlich.

    Okay und wenn dass dann geht, wie könnte man dann die Adresse eventuell herausfinden?

    Mit dem Adressoperator &. Das muss natürlich in einem Kontext sein, in dem die private Variable sichtbar ist, also innerhalb der Klasse oder in einem friend der Klasse:

    class Foo {
    private:
      int x;
    public:
      int* get_x() { return &x; }
    };
    ...
    Foo f;
    int* p = f.get_x();
    ... mit *p arbeiten ...
    

    Ohne dass die Klasse das selbst "will", kommt man nicht an x heran.



  • Bashar schrieb:

    arti schrieb:

    Habe mir in den letzten Monaten die Sprachen C und C++ reingezogen.

    FTFY.

    Du pedant! :p Sei doch froh das er nicht 'C/C++' geschrieben hat 😛


Anmelden zum Antworten