2012-06-30 62 views
0

我正在爲C++類寫一個Yatzy程序。我們應該用std :: cout打印不同骰子的值。我想要做的就是這樣保存常量字符串,然後只是不斷打印骰子出來,因此而不是使用:如何在類中聲明和初始化靜態常量字符串?

std::cout << "-------\n|  |\n| * |\n|  |\n-------\n" 

我想有一個常量字符串與價值,做到這一點:

std::cout << theConstantString; 

通用編程再次獲勝!

------- 
|  | 
| * | 
|  | 
------- 

我對它的解決方案似乎不是最理想的。這是相關代碼:

YatzyIO.h

class YatzyIO 
{ 
    private: 

    // Define die constants 
    static const std::string dieOnePrint; 
    static const std::string dieTwoPrint; 
    static const std::string dieThreePrint; 
    static const std::string dieFourPrint; 
    static const std::string dieFivePrint; 
    static const std::string dieSixPrint; 


    void dieOne(); 
    void dieTwo(); 
    void dieThree(); 
    void dieFour(); 
    void dieFive(); 
    void dieSix(); 

};
(有比那裏,我只是削減任何沒有相應和,我認爲我應該反正更多的代碼)現在

,在YatzyIO.cpp任何函數的實現外:

const std::string YatzyIO::dieOnePrint = "-------\n|  |\n| * |\n|  |\n-------\n"; 
const std::string YatzyIO::dieTwoPrint = "-------\n| * |\n|  |\n| * |\n-------\n"; 
const std::string YatzyIO::dieThreePrint = "-------\n| * |\n| * |\n| * |\n-------\n"; 
const std::string YatzyIO::dieFourPrint = "-------\n| * * |\n|  |\n| * * |\n-------\n"; 
const std::string YatzyIO::dieFivePrint = "-------\n| * * |\n| * |\n| * * |\n-------\n"; 
const std::string YatzyIO::dieSixPrint = "-------\n| * * |\n| * * |\n| * * |\n-------\n"; 

最後在YatzyIO.ccp我有以下功能:

void YatzyIO::dieOne() 
{ 
    //output die side 1 
    std::cout << dieOnePrint; 
} 

(+1每個死,它看起來類似)

這是我迄今爲止完成的第3部分實驗2,第3部分用數組替換了這些常量。我在實驗1上進行了評分,其中也包含了這個代碼,我的老師也說過了(因爲我是瑞典人,所以我在這裏翻譯,所以無論在翻譯中丟失什麼,我都很抱歉!):

「這很好你使用成員變量來保存不同的骰子輸出,我建議你在成員變量中保存不同的行(它們構成不同的輸出)。「

他是什麼意思?有沒有更好的方法來做到這一點?我無法初始化頭文件中的非整數常量。我嘗試了一堆不同的方式,因爲老實說,我的解決方案對我來說似乎並不是最優的。

+3

這沒有任何意義。但也許重要的是你應該使用一個數組而不是6個單獨命名的成員函數和成員變量。 –

+2

你可以通過一個打印函數來保存代碼,它使用一個整數參數來讓你選擇要打印的字符串,但我並不十分清楚你正在問什麼 – mathematician1975

+0

正如@OliCharlesworth所說,這沒有任何意義。但是這裏是我的問題:他說過成員變量還是類變量?因爲那些不是成員變量。 – Linuxios

回答

1

您的老師可能會提示所有不同的輸出實際上是一小部分線條的組合,並且您可以根據需要保留這些線條並組合解決方案,而不是保留整個骰子圖像。

例如-------\n顯示爲用於每個頂部和底部邊界,每個不同的組合,| * * |\n可用於生成的頂部和圖4,圖5和6的底線,也是6. | * |\n中間元件可以是中間線爲1,3,5,你將需要一個空行爲1的頂部和底部線,併爲2和4中間線...你可以存儲這些成員,然後生成骰子圖紙在那些基元上。

例如,繪製你需要做一個6:

std::cout << line  // ------- 
      << two_dots // | * * | 
      << two_dots // | * * | 
      << two_dots // | * * | 
      << line;  // ------- 

這樣,你只需要4元存儲,而不是所有的完整的骰子值。

+0

這正是我的想法。雖然 – Shahbaz

+0

是有道理的,但我不確定是否可以將它寫成答案。 –