重载矩阵运算符

时间:2015-05-18 02:37:56

标签: c++ matrix operator-overloading

我正在使用Strassen算法进行矩阵乘法。我试图超载'*'运算符但没有成功。我在C ++方面经验不足,我不知道如何修复它。

我在运行时没有出错,但Matrix参数 mysql_query($sql,$con) 有weard值(例如8215421532而不是4),因此结果为false。当我以更经典的方式尝试 mysqli_query($sql, $con) 方法(没有运算符)时,它可以正常工作。

Matrix.h

m

Matrix.cpp

strassen

的main.cpp

class Matrix
{
public:

    int size;
    int** mat;

    Matrix(int n, int** values);
    Matrix(int n, int min, int max);
    virtual ~Matrix();

    void print();

    Matrix multiply(Matrix m);
    Matrix& operator=(const Matrix&);
    Matrix operator*(const Matrix&) const;
};

顺便说一句,如果您在'='运算符中看到错误,请不要犹豫告诉我。感谢您的帮助,在过去的两个小时内坚持了下来......

编辑: 矩阵构造函数代码(我不明白为什么它在这里是相关的,但我相信你)

Matrix Matrix::operator*(const Matrix& m) const {

    if (m.size != size){
        printf("La matrice n'a pas la bonne taille !\n");
        return Matrix(0,NULL);
    }

    int **res = new int*[size];
    for (int i = 0; i < size; i++){
        res[i] = new int[size];
    }

    // Breakpoint here: variable m seems completely wrong
    strassen(mat, m.mat, res, size);
    return Matrix(size, res);
}

Matrix& Matrix::operator=(const Matrix& m){
    for (int i = 0; i < m.size; i++)
    for (int j = 0; j < m.size; j++)
        mat[i][j] = m.mat[i][j];
    return *this;
}

EDIT2:通过添加复制构造函数(三个规则)解决 - &gt;谢谢Igor Tandetnik(评论中)

Matrix m1 = Matrix(4, 0, 9);
Matrix m2 = Matrix(4, 0, 9);

printf("Matrice 1 :\n");
m1.print();
printf("Matrice 2 :\n");
m2.print();

printf("Multiplication Strassen :\n");
Matrix m3 = m1 * m2;
m3.print();

1 个答案:

答案 0 :(得分:0)

通过添加复制构造函数(三个规则)解决 - &gt;谢谢Igor Tandetnik(评论中)

Matrix::Matrix(const Matrix& m){
    size = m.size;

    mat = new int*[m.size];
    for (int i = 0; i < m.size; i++){
        mat[i] = new int[m.size];
        for (int j = 0; j < m.size; j++)
            mat[i][j] = m.mat[i][j];
    }
}