frage zu classe



  • gibt es eine möglichkeit zubestimmen das man eine funktion
    in der selben und in einer andere classe verwenden darf aber in einer anderen nicht

    class My{
      int x;
      My();
      int get();  
    };
    My::My():x(10){}
    int My::get(){return x;}
    
    class My2{
      My xx;
      int get();
    }
    int You::get(){return xx.get();}  // in der classe ist es erlaubt get zu benutzen
    
    class You{
      My xx;
      int get();
    }
    int My2::get(){return xx.get();} //in der klasse is es nich erlaubt get zu benutzen
    


  • Nur auf die eigene Klasse kannst du die Funktion einschränken, indem du sie in den private-Bereich packst. Wenn du einzelne Ausnahmen erlauben willst, kannst du den entsprechenden Klassen friend-Zugang gewähren:

    class My
    {
    private:
      int x;
      int get();  
    public:
      My();
      friend class My2;
    };
    My::My():x(10){}
    int My::get(){return x;}
    
    class My2{
      My xx;
      int get();
    }
    int My2::get(){return xx.get();}  // My2 ist friend, kommt also an die privaten Member dran
    
    class You{
      My xx;
      int get();
    }
    int You::get(){return xx.get();} // You ist *kein* friend, der Compiler verweigert die Zusammenarbeit
    


  • kann man mit den befehl friend
    auf die ganze klasse zu greifen oder nur da wo man es definirt hat (z.b. im public bereich)

    geht so was auch:
    wenn man jetzt ein pointer hat der auf xx zeigt
    kann man doch damit auch auf private dinge zu greifen
    oder?

    class My2{
      My xx;
      int get();
      public:
      My* getpointer();
    }
    int My2::get(){return xx.get();}
    My* My2::getpointer(){return &xx;}  
    getpointer()->x = 20; //kann man dann einfach so auf x zu greifen
    


  • Bei friend ist es egal, wo es innerhalb der Klassendeklaration steht, die Friend-Klasse (oder alternativ kann man auch einzelnen Funktionen angeben) hat immer Zugriff auf alle Daten (public, protected und private).



  • Btw, auf die Daten zugreifen darf nur derjenige, der als friend definiert wurde - d.h. die Zuweisung 'getpointer()->x = 20;' funktioniert nur im Inneren einer My2-Methode.


Anmelden zum Antworten