2015-08-08 7 views
-1

У меня есть два класса; класс игрока и класс соответствия. Я хочу, чтобы игрок мог использовать все свои функции-члены; перенос, захват и т. д., но его функции-члены должны знать о членах данных класса соответствия; борт, противник, претендент, не делающий этих членов данных общедоступными.Ошибка доступа к элементу данных между классами

Если вы не можете найти подходящее решение или смутить насчет того, что я прошу, мне все равно будет интересен совет по организации классов.

mancala.h

#ifndef MANCALA_H 
#define MANCALA_H 

#include <string> 
#include <random> 

namespace mancala{ 

    class player{ 
     public: 
      void carry(int pit); 
      void capture(const int& pit); 
      bool madeStore(const int& pit)const; 
      bool madeCapture(const int& pit)const; 
      bool madeValidMove(const int& pit)const; 
      bool madeSideClear()const; 
      bool operator==(const player& p)const; 
     private: 
      std::string tag; 
    }; 

    class match{ 
     public: 
      match(const int& match_ID = 0) : board{4,4,4,4,4,4,0,4,4,4,4,4,4,0}{ 
       if(match_ID){ 
        ; 
       } 
       else{ 
        this->turn = randPlayer(); 
        this->status = "make move"; 
       } 
      }; 
      void begin(); 
      void end(); 
      void save(); 
      bool update(); 
     private: 
      player challenger, opponent, turn; 
      static const int seeds = 48; 
      static const int pits = 14; 
      std::string status; 
      int board[pits]; 
      void nextTurn(); 
      player randPlayer(); 
    }; 
} 

#endif//MANCALA_H 

Пример из: mancala.cpp

void player::carry(int pit) 
{ 
    if(this->madeValidMove(pit) == false){ 
     status = "invalid move"; 
    } 
    else{ 

     int hand = board[pit]; 

     board[pit] = 0; 

     for(hand; hand != 0; hand--){ 

      if(pit == 13){ 
       pit = 0; 
      } 
      else{ 
       pit++; 
      } 
      //Skips opponent store 
      if(pit == 13 && turn == challenger){ 
       pit = 0; 
      }//Skips challenger store 
      else if(pit == 6 && turn == opponent){ 
       pit++; 
      } 
      //If placing last seed check where it is being placed 
      if(hand == 1){ 
       //Store 
       if(this->madeStore(pit)){ 
        board[pit]++; 
        status = "free move"; 
       }//Capture 
       else if(this->madeCapture(pit)){ 
        this->capture(pit); 
        nextTurn(); 
       }//Normal 
       else{ 
        board[pit]++; 
        nextTurn(); 
       } 
      }//Placing seed 
      else{ 
       board[pit]++; 
      } 
     } 

     if(this->madeSideClear()){ 
      end(); 
     } 
    } 

    save(); 
} 

ответ

0

сделать класс матч друга класса игрока.

https://en.wikipedia.org/wiki/Friend_class

Подруга класс в C++ может получить доступ к «частным» и «защищенных» членов класса, в котором она объявлена ​​как друга.

 Смежные вопросы

  • Нет связанных вопросов^_^