首页 > 解决方案 > 类中c ++的运算符+重载

问题描述

这是为我的教师分配的,我想为operator +矩阵做重载我创建新矩阵并将总和放入这个矩阵并打印它,但它什么也没打印,所以任何人都可以帮我解决这个问题吗?

class matrix
{
private:
  int* data;
  int row, col;

public:
  matrix();
  matrix(int r, int c, int num[]);
  friend ostream& operator << (ostream& out, matrix mat1);
  friend istream& operator >> (istream& in, matrix& mat);
  int getrow();
  int getcol();
  int getdata(int i);
  int setrow(int r);
  int setcol(int c);
  int setdata(int num[]);
  matrix operator+ (const matrix& mat2);
};

现在我写了这段代码,它什么也没打印,谁能帮我解决这个问题?首先,我为数据制作 setter 和 getter。

matrix::matrix(){
  row=0;
  col=0;
}

matrix::matrix(int r, int c, int num[])
{
  row = r;
  col = c;
  data = new int[r*c];
  for(int i=0; i < (r*c); i++)
    data[i] = num[i];
}

matrix::getrow() { return row; }
matrix::getcol() { return col; }

matrix::setrow(int r) { row=r; }
matrix::setcol(int c) { col=c; }

matrix matrix::operator+ (const matrix& mat2)
{
  matrix mat3;
  for(int i=0; i < mat3.getrow() * mat3.getcol(); i++) {
    mat3.data[i] = data[i] + mat2.data[i];
  }
  return mat3;
}

int main(){
  int num2 [] = {1,2,3,4,5,6,7,8,8};
  int num3 [] = {1,0,0,0,1,0,0,0,1};

  matrix x;

  matrix mat2(3, 3, num2);
  matrix mat3(3, 3, num3);
  matrix mat4;
  mat4 = mat2 + mat3;
  cou << mat4;

  return 0;
}

标签: c++oop

解决方案


这里有一些建议

1.初始化错误

尝试添加这样的构造函数重载方法:

matrix::matrix(int r, int c)
{
    row = r;
    col = c;
    data = new int[r*c];
    for (int i = 0; i < r*c; i++) {
        data[i] = 0;
    }
}

然后在operator+重载函数中,使用此方法启动 mat3:

matrix mat3(mat2.getrow(), mat2.getcol());


2.overload=运算符是必不可少的,因为您决定mat4 =

matrix matrix::operator= (const matrix& from_mat)
{
    matrix to_mat(from_mat.getrow(), from_mat.getcol());
    for (int i = 0; i < from_mat.getrow() * from_mat.getcol(); i++) {
        to_mat.data[i] = from_mat.data[i];
    }
    return to_mat;
}


3.在main功能上,只需使用matrix mat4 = mat2 + mat3;


推荐阅读