实现2D矩阵从类c++

Implement 2D matrix from classes C++

本文关键字:c++ 2D 实现      更新时间:2023-10-16

我是c++的新手,目前我正试图从类中实现2D矩阵,这是我目前的代码,现在我无法创建矩阵对象的实例,请给我反馈我需要修复的东西。

*更新:我已经修复了一些代码,但矩阵不打印任何东西

#include <iostream>
#include <cstdlib>
using namespace std;
class Matrix
{
    public:
        Matrix(); //Default constructor
        Matrix(int *row, int *col); //Main constructor
        void setVal(int row, int col, int val); //Method to set the val of [i,j]th-entry
        void printMatrix(); //Method to display the matrix
        ~Matrix(); //Destructor
    private:
        int row, col;
        double **matrix; 
        //allocate the array
        void allocArray()
        {
            matrix = new double *[*row];
            for (int count = 0; count < *row; count++)
                *(matrix + count) = new double[*col];
        }
};
//Default constructor
Matrix::Matrix() : Matrix(0,0) {}
//Main construcor
Matrix::Matrix(int *row, int *col)
{   
    allocArray();
    for (int i=0; i < *row; i++)
    {
        for (int j=0; j < *col; j++)
        {
            *(*(matrix + i) + j) = 0;
        }
    }
}
//destructor
Matrix::~Matrix()
{
    for( int i = 0 ; i < row ; i++ )
        delete [] *(matrix + i) ;
    delete [] matrix;
}
//SetVal function
void Matrix::setVal(int row, int col, int val)
{
    matrix[row][col] = val;
}
//printMatrix function
void Matrix::printMatrix()
{
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < col; j++)
            cout << *(*(matrix + i) + j) << "t";
        cout << endl;
    }
}

int main()
{
    int d1 = 2;
    int d2 = 2;
    //create 4x3 dynamic 2d array
    Matrix object(&d1,&d2);
    object.printMatrix();
    return 0;
}

你的台词

Matrix object = new int **Matrix(d1,d2);

是错误的。使用简单的

Matrix object(d1,d2);

不需要类似java的语法,实际上在c++中意味着动态分配:Matrix* object = new Matrix(d1,d2);

Matrix* object = new Matrix(d1,d2);代替Matrix object = new int **Matrix(d1,d2);此外,您必须使用object->printMatrix();而不是object.printMatrix();