在c+中使用运算符重载进行矩阵减法+; 我在C++中操作运算符重载,在这个程序中,我必须在运行时从用户获得矩阵大小和值,并对两个对象执行运算符重载(减法),并在第三个对象中分配两个第三对象和显示矩阵,代码低于 #include<ios

在c+中使用运算符重载进行矩阵减法+; 我在C++中操作运算符重载,在这个程序中,我必须在运行时从用户获得矩阵大小和值,并对两个对象执行运算符重载(减法),并在第三个对象中分配两个第三对象和显示矩阵,代码低于 #include<ios,c++,matrix,operator-overloading,operators,dynamic-arrays,C++,Matrix,Operator Overloading,Operators,Dynamic Arrays,在c+中使用运算符重载进行矩阵减法+; 我在C++中操作运算符重载,在这个程序中,我必须在运行时从用户获得矩阵大小和值,并对两个对象执行运算符重载(减法),并在第三个对象中分配两个第三对象和显示矩阵,代码低于 #include<iostream> using std::cout; using std::cin; using std::endl; class matrix{ int **matrixList; int row; int col;

在c+中使用运算符重载进行矩阵减法+;

我在C++中操作运算符重载,在这个程序中,我必须在运行时从用户获得矩阵大小和值,并对两个对象执行运算符重载(减法),并在第三个对象中分配两个第三对象和显示矩阵,代码低于

#include<iostream>
using std::cout;
using std::cin;
using std::endl;
class matrix{
    int **matrixList;
    int row;
    int col;
    public:
    explicit matrix(){};
    matrix(int**,int,int);
    matrix operator-(matrix);
    void getValues();
    void displayMatrix();
};
matrix::matrix(int** matrixList,int row,int col){
    this->matrixList=matrixList;
    this->row=row;
    this->col=col;
}
void matrix::getValues(){
    for(int i=0;i<row;i++){
        cout<<"\n enter value in row "<<i+1<<"\n";
        for(int j=0;j<col;j++)
            cin>>matrixList[i][j];
    }
}
matrix matrix::operator-(matrix obj){
    matrix tmpObj(matrixList,row,col);
    for(int i=0;i<row;i++){
        for(int j=0;j<col;j++){
            tmpObj.matrixList[i][j]=this->matrixList[i][j]-obj.matrixList[i][j];
        }       
    }
    return tmpObj;
}
void matrix::displayMatrix(){
    for(int i=0; i<row; i++){
        for(int j=0;j<col; j++){
            cout<<"  "<<matrixList[i][j]<<" ";
        }
        cout<<endl;
    }
}
int main(){

    int **matrixPtr;
    cout<<"enter no of rows : ";
    int row;
    cin>>row;
    cout<<"enter no of columns : ";
    int col;
    cin>>col;

    matrixPtr = new int *[row];
    for(int i=0;i<row;i++){
        matrixPtr[i] = new int[col];
    }
    
    matrix obj1(matrixPtr,row,col);
    obj1.getValues();
    matrix obj2(matrixPtr,row,col);
    obj2.getValues();
    matrix obj3(matrixPtr,row,col);
    obj3=obj1-obj2;
    obj3.displayMatrix();

    for(int j=0;j<row;j++){
        delete[] matrixPtr[j];
        }
        delete matrixPtr;
}


您是否分步调试了代码?请查看。丢失的副本使我胃痛。(特别是,因为您通过值传递对象,例如在
matrix::operator-()
中)-如果您使用了
std::vector
而不是所有这些
new[]
s,则可能是默认情况下您购买了正确的副本(免费),我意识到了一件更可怕的事情:你所有的
matrix
对象都共享相同的值存储空间。(您总是将指针传递给
main()
中唯一的
matrixPtr
)A-A=[0]才有意义。。。要解决这一问题,我强烈建议
matrix
自行和内部管理其值的存储。
  0   0
  0   0