0

我的任务是为二维动态数组创建一个类,我被困在需要创建一个成员函数的部分,我可以调用它来将二维数组中的特定位置更改为我选择的值.

class TwoD
{
public:
    void setRowCol(int numRow, int numCol, double value);
    TwoD();
    TwoD(int row, int col);
    void fillArray();
    void outputArray();



private:
    double** dArray = new double* [MaxRow];
    int MaxRow;
    int MaxCol;


};



TwoD::TwoD()
{
    MaxCol = 3;
    MaxRow = 3;

    for (int i = 0; i < 3; i++)
    {

        dArray[i] = new double[3];

    }

}

void TwoD::setRowCol(int numRow, int numCol, double value)
{
    dArray[numRow][numCol] = value;

}

所以我遇到问题的部分是函数 setRowCol 的最后一部分。我认为问题在于它没有传递数组的“深层”副本,而是传递了原始数组本身。

4

2 回答 2

0

没有std::vector和 使用double**,你可能会有类似的东西:

class TwoD
{
public:
    TwoD(int row, int col) : maxRow(row), maxCol(col) {
        dArray = new double* [maxRow];
        for (int i = 0; i != maxRow; ++i) {
            dArray[i] = new double[maxCol] {};
        }
    }

    ~TwoD() {
        Delete();
    }

    TwoD(const TwoD& rhs) : maxRow(rhs.maxRow), maxCol(rhs.maxCol) {
        dArray = new double* [maxRow];
        for (int i = 0; i != maxRow; ++i) {
            dArray[i] = new double[maxCol];
            for (int j = 0; j != maxCol; ++j) {
                dArray[i][j] = rhs.dArray[i][j];
            }
        }
    }

    TwoD& operator = (const TwoD& rhs) {
        if (&rhs == this) {
            return *this;
        }
        Delete();
        maxRow = rhs.maxRow;
        maxCol = rhs.maxCol;
        dArray = new double* [maxRow];
        for (int i = 0; i != maxRow; ++i) {
            dArray[i] = new double[maxCol];
            for (int j = 0; j != maxCol; ++j) {
                dArray[i][j] = rhs.dArray[i][j];
            }
        }
    }

    void setRowCol(int numRow, int numCol, double value) {
        dArray[numRow][numCol] = value;
    }

private:
    void Delete() {
        for (int i = 0; i != maxRow; ++i) {
            delete [] dArray[i];
        }
        delete [] dArray;
    }

private:
    double** dArray;
    int maxRow;
    int maxCol;
};
于 2014-11-22T13:37:55.000 回答
0

将 MaxRow 设为静态变量并在使用它创建 dArray 之前将其初始化为适当的值 (3)。

于 2014-11-19T05:08:30.153 回答