在类构造函数中初始化char矩阵

时间:2017-10-26 15:03:30

标签: c++ oop constructor char

我需要在类构造函数中初始化我的变量(因为使用声明初始化它是坏的,当然,尽管在工作中)。我尝试用循环初始化它,但我不知道如何正确地做到这一点。我怎么解决这个问题?我应该使用指针吗?

class Track
{
private:
    char track[18][19];
    /*

    need to initialize equal to
    track[18][19] = {
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |",
            "|               |"
    };*/

public:

    Track(){
        for (int i=0; i<18; i++)
            for (int j = 1; j < 18; j++) {
                track[i][j] = ' ';
            }

        for (int i = 0; i < 18; i++) {
            track[i][0] = '|';
            track[i][sizeof(track[i]) / sizeof(track[i][0])] = '|';
        }
        //how to initialize track?
    }

    void Draw() {
        for (int i = 0; i < 18; i++) {
            cout << track[i] << endl;
        }
    }
};

1 个答案:

答案 0 :(得分:0)

建议您将1819定义为常量:

const int LENGTH = 18;
const int WIDTH = 19;

如果您希望正确打印轨道部分,您还需要有足够的空间容纳NULL终止字符:

char track[LENGTH][WIDTH + 1]; // (leave enough room for a NULL char)

至于你的循环,你只需要在每个轨道部分的末尾添加NULL字符并使用WIDTH - 1而不是尝试使用sizeof()来计算倒数第二个字符的索引:

Track() {
    for (int i = 0; i < LENGTH; i++) {
        track[i][0] = '|';

        for (int j = 1; j < WIDTH - 1; j++) {
            track[i][j] = ' ';
        }

        track[i][WIDTH - 1] = '|';
        track[i][WIDTH] = '\0';
    }
}