private



  • class Test
    {
    public:
    	void memberFunction(Test& t)
    	{
    		// Warum ist hier der Zugriff auf die Variable i
    		// möglich, obwohl sie private ist?
    		t.i = 0;
    	}
    private:
    	int i;
    };
    


  • privateer schrieb:

    class Test
    {
    public:
    	void memberFunction(Test& t)
    	{
    		// Warum ist hier der Zugriff auf die Variable i
    		// möglich, obwohl sie private ist?
    		t.i = 0;
    	}
    private:
    	int i;
    };
    

    das ist halt so.
    private schützt nur gegen die ganzen funktionen außerhalb der eigenen klasse. gegen die eigenen brüder gibt es keinen schutz.



  • // Warum ist hier der Zugriff auf die Variable i

    Weil private in C++ auf Klassenebene und nicht auf Objektebene funktioniert. Das heißt innerhalb der Methoden einer Klasse X kannst du auf die private-Elemente aller Objekte von X zugreifen.

    class Test
    {
    int i;
    public:
    void f(Test& p);
    };
    
    Test global;
    
    void Test::f(Test& p)
    {
        i = 2; // mein i
        p.i = 2;
        global.i = 2;
    }
    


  • Folgendes wäre für den Compiler auch etwas schwer nachzuvollziehen (wenn es nicht so wäre, wie es ist):

    class foo {
    public:
       void baz (foo *f) { f->baz(); }
    private:
       void bar () { cout << "private!\n"; }
    };
    
    int main () {
      foo f;
      f.baz(&f);
    }
    

    Etwas Dynamik dazu und schon kennt sich keiner mehr aus und niemand weiß, wer jetzt Zugriff hat, wenn man nicht neue Regeln einführen und noch restriktiver sein will.



  • Ich denke du meinst:

    class foo {
    public:
       void baz (foo *f) { f->bar(); // nicht f->baz() }
    private:
       void bar () { cout << "private!\n"; }
    };
    

    🙂



  • privateer schrieb:

    class Test
    {
    public:
    	void memberFunction(const Test& t)
    	{
    		//ändern durch const nicht mehr möglich...
    		t.i = 0;
    	}
    private:
    	int i;
    };
    

    Währe auch ein Ansatz.

    Devil


Anmelden zum Antworten