2011-05-08 35 views
3

例如,我有一個名爲DeckOfCards和數組char * suit [4]的類。如何初始化作爲類成員的數組?

class DeckOfCards 
{ 
public: 
    // some stuff 

private: 
    char *suit[ 4 ]; 
}; 

在哪裏我可以這樣初始化這個數組? char *suit[ 4 ] = { "Hearts", "Diamonds", "Clubs", "Spades" }我想這可以使用構造函數完成,但我不知道該怎麼做。

回答

5

您可以創建其作爲類的靜態變量,就像這樣:

class DeckOfCards 
{ 
public: 
    DeckOfCards() { 
    printf("%s\n", suit[0]); 
    } 

private: 
    static const char *suit[]; 
}; 

const char *DeckOfCards::suit[] = { "Hearts", "Diamonds", "Clubs", "Spades" }; 

int main(void) 
{ 
    DeckOfCards deck; 
    return 0; 
} 
+0

我無法將其創建爲靜態變量,因爲在此類的某些函數中,我將元素從'suit'數組複製到另一個數組。 – Alex 2011-05-08 20:48:07

+0

我不明白什麼有一個靜態數組與後來無法複製值有關。 – joce 2011-05-08 21:02:49

+0

對不起,我困惑了一些。我將嘗試將其創建爲靜態變量。 – Alex 2011-05-08 21:29:34

5

試試這個:

DeckOfCards::DeckOfCards() 
    :suit{ "Hearts", "Diamonds", "Clubs", "Spades" } 
{} 

如果不工作,那麼你的編譯器不支持C++的那個特性呢。所以你需要做的是舊的方式方法:

DeckOfCards::DeckOfCards()  
{ 
    suit[0] = "Hearts"; 
    suit[1] = "Diamonds"; 
    suit[2] = "Clubs"; 
    suit[3] = "Spades"; 
} 

如果你打算使用雖然字符指針這樣的,你應該讓他們常量,即:

const char *suit[ 4 ]; 

原因是,無論如何你都不能修改字符串,字符串文字駐留在只讀存儲器中。通過聲明它爲const,至少編譯器會告訴你你的問題,如果你試圖修改它。最好避免這一切,只使用std::string