2013-04-28 46 views
0

我正在製作紙牌遊戲,並且我有幾節課。 我有一個Hand類,一個Player類,一個「Column」類(這些類在手後放在屏幕上),我需要每個類都可以訪問其他類的變量。從另一個班級訪問變量/功能

class Hand 
{ 
private: 
    int **Hx,Hy;** //Hand X, Hand Y 
    int HAmount;//Amount of cards in Hand 
    int HOwner; //Player 1/2 
    int Limit; //Limit of cards in Hand 
    int HContents[8]; //Card Position in 54 card deck NOT card value. 
    bool Removed; 
public: 
    Hand(); 
    void Lim(); 
    void Get_Card(); 
    void Show(); 
    void Set_Values(int y, int Own); 
}; 

然後在另一個類,我需要訪問上面的一些變量。

void Card::show() 
{ 
    if((apply == true) 
    { 
     if((Track == true)&&(SelNum == TNum)&&(TOwner == COwner)) 
     { 
      ScnPos = TAmount; 
      x = Tx; 
      y = Ty + ScnPos*10; 
     } 
     if((Hand == true)&&(**HOwner** == COwner)) 
     { 

      x = **Hx** + ScnPos*45; 
      y = **Hy;** 
     } 
     apply_surface(x,y,Cards,Screen,&Clip[Pos]); 
    } 
} 

我試過使用類的友誼和其他方法,但我不能使它的工作。 (很明顯,我有需要這個相同的待遇多個變量) (忽略我的代碼中的任何錯誤)

回答

0

那麼,你應該讓你的變量getterssetters。例如:

class Test { 
    private: int a; 
    public: int GetA() { 
     return this->a; 
    } 
    void SetA(int a) { 
     this->a = a; 
    } 
} 
+2

呃...'this-> a = a' – 2013-04-28 01:19:19

+0

@NikBougalis它有什麼問題? – Ivan 2013-04-28 01:22:17

+0

無需引用此。這是隱含的。當你需要引用調用對象本身而不是其中一個成員時,你只需要這個。就像你引用的例子中的這個 – bdwain 2013-04-28 01:24:48

2

代碼中的錯誤是真正的問題。沒有理由Card將訪問Hand的私人會員。這是設計錯誤,你的其他問題只是試圖告訴你。

+0

我同意。一張牌不需要知道任何關於一隻手的任何理由。無論是什麼邏輯參與手中的所有牌的交互,都應該在手牌類中,並且應該調用該牌類中與其他牌交互的方法。 這裏沒有必要的友誼,通常在任何設計良好的程序中都是不必要的。 – bdwain 2013-04-28 01:22:21

+0

@Elazar _Thanks,我認爲階級友誼是不正確的。很明顯,我的程序在這一點上遠沒有「精心設計」。 – user2328015 2013-04-28 03:34:16