为什么我的构造函数不会在循环执行时重新初始化变量?

时间:2011-04-19 00:27:10

标签: c++ class loops constructor

我的tic-tac-tow board保持与上一个游戏相同的值,而不是重新初始化它应该在构造函数中分配的值。 (123,456,789)

有没有人知道为什么会这样?

构造

ticTacToe:: ticTacToe()
{
    for (int i = 0; i < 1; i++)
        for (int j = 0; j < 3; j++)
            board[i][j] = 49 + (i + j);

     for (int i = 1; i < 2; i++)
        for (int j = 0; j < 3; j++)
            board[i][j] = 51 + (i + j);

     for (int i = 2; i < 3; i++)
        for (int j = 0; j < 3; j++)
            board[i][j] = 53 + (i + j);

     player = 1;
     validMove = true;
     gameOver = false;
     winner = 0;
     p1win = 0;
     p2win = 0;
     tie = 0;
}

会员功能:

void ticTacToe:: gameLoop()
{
    do
    {
    ticTacToe();
    print();
    getMove();
    alternatePlayer();
    winGameCheck();
    endGameCheck();
    }
    while (!gameOver);
    endPrint();
}

2 个答案:

答案 0 :(得分:3)

ticTacToe(); 

这会构造一个临时的ticTacToe对象,然后销毁该临时对象。它实际上并没有“重新调用”当前对象的构造函数。

我认为这里的正确方法是提供重新绘制游戏板的“reset()”功能。也就是说,即使这样也没有意义,因为你每回合都要重置游戏。

答案 1 :(得分:2)

您没有调用构造函数,实际上您正在创建一个新对象并丢失对它的引用。例如:

ticTacToe obj = ticTacToe();
//              ^----------- you're doing this, but not assigning it to anything

您希望将构造函数中的内容分隔为不同的方法,例如initreset,并从构造函数和游戏循环中调用该方法。