如何将2-D数组初始化为类变量

How to initialize 2-d array as class variable?

本文关键字:初始化 类变量 数组 2-D      更新时间:2023-10-16

我有一个类别的定义:

#include <stdio.h>
#pragma warning(disable:4996)
#define MAX_ROW 10
#define MAX_COLUMN 40
class VideoSim
{
private:
    char video[MAX_ROW][MAX_COLUMN];
    int currentRow;
    int currentColumn;

public:
    VideoSim::VideoSim(void);
    VideoSim::~VideoSim(void);
    void clearScreen(void);
    int setCursorPosition(int row, int column);

};

我也有我的.cpp文件,其中包含这些方法:

#include "VideoSim.h"

VideoSim::VideoSim(void)
{
    currentRow = 0;
    currentColumn = 0;
    video[MAX_ROW][MAX_COLUMN] = { 0 };
}
VideoSim::~VideoSim(void)
{
    printf("Dead Video n");
}
void VideoSim::clearScreen(void)
{
    int count = 0;
    char *pVideo = video[count];
    for (count = 0; count < (MAX_ROW * MAX_COLUMN); count++)
    {
        *(pVideo++) = ' ';
    }
}

int VideoSim::setCursorPosition(int newRow, int newColumn)
{
    if (newRow >= 0 && newRow <= MAX_ROW && newColumn >= 0 && newColumn <= MAX_COLUMN)
    {
        currentColumn = newColumn;
        currentRow = newRow;
        return 0;
    }
    else
    {
        return 1;
    }

}

现在这是我的主要问题发生的问题:

#include "VideoSim.h"

int main(void)
{
    VideoSim v;
    return 0;
}

该程序创建了名为v的VideoSim对象,但随后崩溃了……任何想法为什么会发生这种情况?

如果要在数组中将所有元素初始化为0,则必须使用initializer语法:

VideoSim::VideoSim()
    : video{}
{
    currentRow = 0;
    currentColumn = 0;
}

video[MAX_ROW][MAX_COLUMN] = { 0 };行中,您将零写为 video[MAX_ROW][MAX_COLUMN],这是一个不限制的错误。

您还可以将零初始化放在类定义中为:

    char video[MAX_ROW][MAX_COLUMN]{};

如果您最终添加自定义构造函数,则可以通过提供与上面构造函数中的那样的不同初始化来覆盖此默认初始化。

最简单的方法:

char video[MAX_ROW][MAX_COLUMN] = {{0}};//initialize all elements to NULL
VideoSim::VideoSim(void)
{
    currentRow = 0;
    currentColumn = 0;
    memset(video,0, sizeof(video));
}