C++ 不工作矩阵运算符+重载
我只是想做个例子而已!我知道它泄漏应用程序来学习C++中操作符重载,但我得到的总和为零的元素的值…我怀疑问题出在复制构造函数中 具体实施情况如下:C++ 不工作矩阵运算符+重载,c++,matrix,operators,operator-overloading,C++,Matrix,Operators,Operator Overloading,我只是想做个例子而已!我知道它泄漏应用程序来学习C++中操作符重载,但我得到的总和为零的元素的值…我怀疑问题出在复制构造函数中 具体实施情况如下: class Matrix{ public: Matrix(int row, int col); Matrix(const Matrix& src); float& set(int row, int col); float get(int row, int
class Matrix{
public:
Matrix(int row, int col);
Matrix(const Matrix& src);
float& set(int row, int col);
float get(int row, int col);
const Matrix & operator+(const Matrix& rhs);
private:
float* data;
int nrow;
int ncol;
};
Matrix::Matrix(int row, int col){
nrow = row;
ncol = ncol;
data = new float[nrow*ncol];
}
Matrix::Matrix(const Matrix& src){
nrow = src.nrow;
ncol = src.ncol;
data = new float[nrow*ncol];
for(int i = 0; i < nrow*ncol; i++){
data[i] = src.data[i];
}
}
float& Matrix::set(int row, int col){
return data[row*ncol+col];
}
float Matrix::get(int row, int col){
return data[row*ncol+col];
}
const Matrix & Matrix::operator+(const Matrix& rhs){
if (this->nrow == rhs.nrow && this->ncol == rhs.ncol){
Matrix* m = new Matrix(rhs.nrow, rhs.ncol);
for(int i=0; i< nrow*ncol; i++){
m->data[i] = data[i] + rhs.data[i];
}
return *m;
} else {
throw -1;
}
}
#include <iostream>
using namespace std;
int main ()
{
Matrix A(1,1);
Matrix B(1,1);
A.set(0,0)=1;
B.set(0,0)=2;
cout << A.get(0,0) << endl;
cout << B.get(0,0) << endl;
Matrix C = A + B; // Marix C(A+B);
cout << C.get(0,0) << endl;
return 0;
}
其中有一个输入错误,导致代码具有未定义的行为
用以下方法修复它:
ncol = col;
请确保将编译器警告/诊断级别设置为最高级别,GCC会捕捉到这一点
您也在泄漏浮点[],因此代码不完整。不要忘记添加适当的析构函数,并始终遵循以下步骤
其中有一个输入错误,导致代码具有未定义的行为
用以下方法修复它:
ncol = col;
请确保将编译器警告/诊断级别设置为最高级别,GCC会捕捉到这一点
您也在泄漏浮点[],因此代码不完整。别忘了添加适当的析构函数,并始终遵循。我在那里没有看到析构函数。你违反了吗?我不知道为什么这不起作用,但有两件事很突出。这段代码到处泄漏内存。它应该有一个析构函数来清理内存,甚至更好,它应该使用智能指针来管理内存。您还抛出了一个int。抛出一个类,最好是从std::exception派生的类,这是最好的做法。我在这里没有看到析构函数。你违反了吗?我不知道为什么这不起作用,但有两件事很突出。这段代码到处泄漏内存。它应该有一个析构函数来清理内存,甚至更好,它应该使用智能指针来管理内存。您还抛出了一个int。抛出一个类,最好是从std::exception派生的类,这始终是最佳实践。