如何在类中声明和初始化静态常量字符串?

时间:2012-06-30 12:36:02

标签: c++ string initialization const declaration

我正在为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,看起来相似)

这只是我到目前为止完成的实验2中的第3个,第三个用数组替换了这些consts。我在实验室1上得到了评分,其中也包含了这段代码,我的老师也说了(因为我是瑞典语,所以我在这里翻译,所以翻译中遗失的任何东西都很抱歉!):

“你使用成员变量是好的,所以保存不同的骰子输出。我建议你在成员变量中保存不同的行(形成不同的输出)。”

他的意思是什么?有没有更好的方法呢?我无法在头文件中初始化非整数常量。我尝试了一些不同的方式,因为说实话,我的解决方案对我来说似乎不那么优秀。

1 个答案:

答案 0 :(得分: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个基元而不是所有完整的骰子值。