【问题标题】:initialize char matrix in class constructor在类构造函数中初始化 char 矩阵
【发布时间】:2023-04-10 07:30:02
【问题描述】:

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

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;
        }
    }
};

【问题讨论】:

  • 你可以使用构造函数成员初始化列表。
  • 因为用声明初始化它是不好的谁说的?
  • 你试过什么?代码是什么样的?
  • 你有什么理由不使用std::vector&lt;std::string&gt; 吗?
  • 让我编辑帖子向您展示 manni66 是不是很糟糕的风格?如果没有,请纠正我

标签: c++ oop constructor char


【解决方案1】:

建议您将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';
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2012-05-12
    • 2012-10-23
    • 1970-01-01
    • 2021-11-06
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多