2012-06-30 2 views
0

Я пишу программу Yatzy для класса C++. Мы должны печатать значение разных кубиков, используя 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, которую я закончил до сих пор, третий заменяет эти константы массивами. Я был оценен в лаборатории 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

Да, это имеет смысл. –

Смежные вопросы