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_mgzugreifen?Danke!
-
private begrenzt den Zugriff auf Klassenscope. Sprich: alle Instanzen einer Klasse haben Zugriff auf die privaten Elemente. Nicht nur
this.PS:
memcpyist keine gute Idee...
-
Danke, wusste ich nicht!
Warum ist
memcpykeine 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.