Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 超载'=';使'+';使用矩阵_C++_Matrix_Operator Overloading - Fatal编程技术网

C++ 超载'=';使'+';使用矩阵

C++ 超载'=';使'+';使用矩阵,c++,matrix,operator-overloading,C++,Matrix,Operator Overloading,这是一个具有存储2D动态数组的对象“矩阵”的类。我需要能够添加2个矩阵,并将元素之和放入结果矩阵。(即:c[1][1]将等于a[1][1]+b[1][1])。 但我想通过以下方式实现它: Square_Matrix a,b,c; c = a + b; 这里是我的两个重载运算符,'='一个在'+'之外工作正常(因此a=b=c工作正常,矩阵被复制过来)。不幸的是,我的IDE上没有错误,程序只是关闭并说“Square_Matrix已经停止工作”。我怎样才能解决这个问题 我也不太确定我是否正确地实现了

这是一个具有存储2D动态数组的对象“矩阵”的类。我需要能够添加2个矩阵,并将元素之和放入结果矩阵。(即:c[1][1]将等于a[1][1]+b[1][1])。 但我想通过以下方式实现它:

Square_Matrix a,b,c;
c = a + b;
这里是我的两个重载运算符,'='一个在'+'之外工作正常(因此a=b=c工作正常,矩阵被复制过来)。不幸的是,我的IDE上没有错误,程序只是关闭并说“Square_Matrix已经停止工作”。我怎样才能解决这个问题

我也不太确定我是否正确地实现了我的“+”,有人说“return*this”不会起任何作用

//.h file
Square_Matrix& operator=(const Square_Matrix& Par2);
Square_Matrix& operator+(const Square_Matrix& Par3);

//.cpp file    
Square_Matrix& Square_Matrix::operator=(const Square_Matrix& Par2){
    if (size != Par2.size){
        cout << "Matrices are of different size" << endl;
    } else {
        for (int i = 0; i < size; i++){
            for (int j = 0; j < size; j++){
                 matrix[i][j] = Par2.matrix[i][j];
            }
        }
    }
}

Square_Matrix& Square_Matrix::operator +(const Square_Matrix& Par3){
    Square_Matrix result;
    result.Set_Size(Par3.size);
    for (int i = 0; i < Par3.size; i++){
        for (int j = 0; j < Par3.size; j++){
            result.matrix[i][j] = Par3.matrix[i][j]+matrix[i][j];
        }
    }
return *this;
}
/.h文件
平方矩阵和运算符=(常数平方矩阵和Par2);
平方矩阵和运算符+(常数平方矩阵和Par3);
//.cpp文件
平方矩阵和平方矩阵::运算符=(常数平方矩阵和Par2){
如果(尺寸!=Par2.size){

coutYour
Square\u矩阵和Square\u矩阵::运算符=(const Square\u矩阵和Par2)
应该以

return *this;
return result;
您的
Square\u矩阵和Square\u矩阵::运算符+(const Square\u矩阵和Par3)
应以

return *this;
return result;
改变

Square_Matrix& Square_Matrix::operator +(const Square_Matrix& Par3)


您的
运算符=
应以
返回*this;
结尾。您的
运算符+
应以
返回结果;
结尾,并且不应返回引用。@remyabel:From
operator+
?这不是不返回引用的原因。您不返回引用是因为
运算符+
应该是创造性的正在为函数本地生成一个新对象。如果您返回了对该对象的引用,则它将是一个悬空引用。另请参阅(查找
运算符+
运算符+=
的正确定义)很抱歉,这是一个输入错误,my=函数确实有return*this。返回结果似乎可以清除错误thanks@Foxic-首先,让operator=检查尺寸是对operator=应该做的事情的滥用。operator=应该有一个目的,而且只有一个目的,那就是复制。它不是供您编码的“业务规则”,例如由于大小不匹配而不制作副本。如果需要检查大小的函数,请为此目的创建另一个成员函数--不要为此使用运算符=。如果返回类型是引用,运算符+不应返回“result”。“result”“是一个局部变量,返回对局部变量的引用是很困难的。@PaulMcKenzie,你说得对。对不起,我忘了添加最后一个要求。”。