是否可以使用 for 循环在构造函数中声明二维数组类成员?

Posted

技术标签:

【中文标题】是否可以使用 for 循环在构造函数中声明二维数组类成员?【英文标题】:Is it possible to declare a 2d array class member inside the constructor with a for loop? 【发布时间】:2016-05-15 19:42:11 【问题描述】:

目前我有这个

//gameboard.h

class GameBoard
 
public:
    GameBoard(bool showShips);
    ~GameBoard();
    void draw();
    void placeShipStart(int x, int y);
    void placeShipEnd(int ship, int x, int y);
private:
    bool defaultShowShips;
    Field playerBoard[10][10];
    vector<Ship*> ships[5];
;

//gameboard.cpp

GameBoard::GameBoard(bool showShips)
 
    defaultShowShips = showShips; 
    for (int i = 0; i < 10; i++)
        for (int j = 0; j < 10; j++)
        
            xyzCoord ul, lr;
            ul.x = j * 5.0f;
            ul.y = i * 5.0f;
            ul.z = 2.0f;
            lr.x = j * 5.0f + 5.0f;
            lr.y = i * 5.0f + 5.0f;
            lr.z = 0.0f;
            playerBoard[i][j] = Field(ul, lr);
        
;

它现在的方式告诉我我需要为字段设置一个默认构造函数。我正在尝试将每个位置初始化到不同的位置。我这样做完全错了吗?我已经看到向量方法的向量。如果可能的话,我想避免这种情况,因为它之前对我不起作用。

【问题讨论】:

我们可以看看你的Field课程吗?当它说 default constructor 时,意味着在构造函数声明中声明的所有变量都必须提供 default 值。我看到您的Field 构造函数至少有两个xyzCoord 类型的参数。所以,要么在参数列表中提供默认值(我可以在看到你的类时告诉你)。或者添加第二个不带参数的构造函数。 不使用默认构造函数就不能初始化这些值吗?像我可以分配空间然后单独构建每个空间吗? 查看我的更新答案。查看 xyzCoord 的构造函数会有所帮助。 【参考方案1】:

我在某种程度上猜测这里,但试试这个:

Field::Field()

    // Provided default values to your two member variables


Field::Field(xyzCoord ul, xyzCoord lr)

    // Populate your two member variables with the passed in values

第一个构造函数将是您的默认构造函数,因为它没有参数。

我希望这会有所帮助。如果我错过了您的问题,我们深表歉意。

更新

替代方案是:

这在标题中:

Field::Field(xyzCoord ul = xyzCoord(), xyzCoord lr = xyzCoord())

这在源码中:

Field::Field(xyzCoord ul /*xyzCoord()*/, xyzCoord lr /*xyzCoord()*/)

    // Populate your two member variables with the passed in values

我正在传达原则。没有看到 Field 和 xyzCoord 类,我看不到合适的声明是什么。使用最后一种方法,构造函数如何为每个参数提供默认值。

有关详细信息,请参阅此 default constructor 主题。它部分提到:

【讨论】:

我想避免在没有 ul 和 lr 的情况下创建 Field 对象。有可能还是我在叫错树?我想在游戏板的构造函数中初始化这些值。 @VincentJenkins 我已经更新了我的回复,向您展示如何使用您的构造函数并提供默认值。

以上是关于是否可以使用 for 循环在构造函数中声明二维数组类成员?的主要内容,如果未能解决你的问题,请参考以下文章

数组(二维)

C++:使用迭代器构造一个二维动态分配的数组

使用两个for循环给二维数组赋固定值,并输出?

for循环二维数组的取值方式?

java中大量使用二维数组和for循环会发生内存泄露吗?该怎么解决?

在类中声明数组并在构造函数中初始化