动态矩阵类

时间:2016-10-20 15:45:27

标签: c++ class matrix dynamic

我需要构造一个矩阵类,并使用特定的函数为其赋值。

这是我的代码:

class MATRIX
{
    int row, col;
    double **p;
public:
    MATRIX(int, int);
    void Set(int, int, double);
    ~MATRIX();
};

MATRIX::MATRIX(int x, int y)
{
    row = x;
    col = y;
    p = new double*[x];
    for (int i = 0; i < x; i++)
    {
        p[i] = new double[y];
    }
}

void MATRIX::Set(int a, int b, double d)
{
    p[a][b] = d;
}

    MATRIX::~MATRIX()
{
    for (int i = 0; i < row; i++)
        delete[] p[i];
    delete[] p;
}

int main()
{
    MATRIX A(2, 3); // Initializes a matrix with size 2x3
    MATRIX B(7, 4); // Initializes a matrix with size 7x4

    A.Set(1, 2, 4.7); // Sets the value of A[1][2] to 4.7
    B.Set(0, 3, 2.9); // Sets the value of B[0][3] to 2.9
}

我在Set函数中的调试器中看到了这一点:

this->p was 0x1110112

我该如何解决?

1 个答案:

答案 0 :(得分:0)

因为这是C ++,这看起来更像C.也许一个好的第一步是编辑你的一些代码。我建议你为std :: array或std :: vector更改你的C风格数组。它在头文件中是这样的:

template<typename T, std::size_t rows, std::size_t columns> 
class MATRIX
{
    std::array<std::array<T, columns>, rows> matrix_data;

public:
    MATRIX();
    void Set(int, int, double);
    ~MATRIX();
};

这使用模板类,这意味着你必须在主

中做这样的事情
MATRIX<double, 2, 3> A;

我没有时间编写整个代码,但我认为这会让你开始!古德勒克!