C ++ - 在类上初始化一个空数组

时间:2014-08-31 05:40:58

标签: c++ arrays

我在初级化一个空数组时遇到了一些麻烦,或者我在类中调用它。基本上我想用0填充二维数组。

这是我的代码:

Board.cpp

#include "Board.h"
#include <string>
#include <iostream>
#include "Player.h"

using namespace std;

Board::Board()
: _board{ { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } }
{
}

void Board::drawBoard()
{
    for (int i = 0; i < 4; i++){
        for (int j = 0; j < 4; j++){
            if (i == 0 && j == 0){
                cout << " ";
            }
            else if (i == 0){
                cout << " " << j << " ";
            }
            else if (j == 0){
                cout << i;
            }
            else {
                if (_board[i][j] == 0)
                    cout << "| " << "|";
                else
                    cout << "|" << _board[i][j] << "|";
            }
        }
        cout << endl;
    }
}

void Board::playerInput(char input)
{
}

这是Board.h:

#pragma once
#include <string>
#include <iostream>

class Board
{
public:
    Board();
    void drawBoard();
    void playerInput(char input);


private:
    char _board[3][3];
    char _input;
};

是一种初始化数组的正确方法吗?我读了一些文章,但这让我更加困惑。 我很抱歉,如果我听起来很愚蠢。但我需要你的帮助。 谢谢。

3 个答案:

答案 0 :(得分:3)

您需要做的就是 value initialize 数据成员:

Board::Board() : _board() {}

这将零初始化_board的所有元素,也适用于C ++ 03。

答案 1 :(得分:1)

juanchopanza使用的方法是c ++ 11设置的当前方法 但是,我会建议一些小的改变。如果所有默认构造函数都在做初始化数组,我会在头文件中初始化它。喜欢这个

#pragma once
#include <string>
#include <iostream>

class Board
{
public:
    Board()=default; //becomes compiler constructed 
    void drawBoard();
    void playerInput(char input);


private:
    char _board[3][3]{};//added {} here
    char _input;
};

这样,在调用构造函数之前初始化数组,构造函数由编译器生成。 这里的优点是您需要的代码更少,并且如果您愿意,它可以扩展为其他构造函数。

例如:

如果你添加

Board(char输入)输入 所需要的只是:

Board(char input)
{
   _input=input;// no need to repeat initialization code for _board array

}

答案 2 :(得分:0)

根据您的编译器,您应该能够这样做(注意使用括号而不是括号):

Board::Board()
: _board( { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } )
{
}

参考:https://stackoverflow.com/a/2409882/1932930

看起来您正在使用VS2013。看起来VS2013支持它。参考:http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport