2011-05-08 88 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