Zugriff auf private Daten von aussen



  • Nachfolgendes Verständnisproblem:

    Header:

    class board_c {
    public:
    
      inline int value_midgame(void) const {
        return value_mg;
      }
    
      inline int value_endgame(void) const {
        return value_eg;
      }
    
      // more...
    
      void copy(const board_c & board);
      void copy(const board_c * board);
    
      bool is_ok(void) const;
    
      // more...
    
    private:
    
      int value_mg;
      int value_eg;
    
      // more...
    };
    

    Source:

    void board_c::copy(const board_c & board) {
      memcpy(this, &board, sizeof(board_c));
    }
    
    void board_c::copy(const board_c * board) {
      memcpy(this, board, sizeof(board_c));
    }
    
    bool board_c::is_ok(void) const {
      board_c board;
    
      board.copy(this);
    
      // Zugriff auf private Member "board.value_mg" erlaubt !?
    
      if (board.value_mg != value_mg) return false;  
    
      // more...
    
      return true;
    }
    

    Warum darf ich auf die private Member board.value_mg zugreifen?

    Danke!



  • private begrenzt den Zugriff auf Klassenscope. Sprich: alle Instanzen einer Klasse haben Zugriff auf die privaten Elemente. Nicht nur this .

    PS: memcpy ist keine gute Idee...



  • Danke, wusste ich nicht!

    Warum ist memcpy keine gute Idee? Bisher gabs keine Probleme. Welche Möglichkeit schlägst Du vor?



  • Wenn Deine Klasse so trivial ist, dass memcpy funktioniert, dann kannst Du genauso gut direkt den Copy-Constructor/Assignment-Operator benutzen, den der Compiler die generiert:

    board_c board1;
    board_c board2(board1); //copy constructor
    board_c board3 = baord1; //ebenfalls aber implizite form
    
    board2 = board3; //operator=
    

    Die Sachen werden, wie gesagt, alle vom Compiler für Dich generiert.

    memcpy geht z.B. nicht mehr, wenn Deine Klasse selbst Klassen als Member hat, weil deren Konstruktor nicht aufgerufen wird.


Anmelden zum Antworten