矩阵的实现(矩阵相加)

#include <iostream>
using namespace std;


class Matrix
{
private:
int rows,columns;  //矩阵行数列数
int **element;  //动态二维数组


void InitiaMatrix(int rows,int columns);  //申请并初始化指定行数列数的空矩阵


public:
Matrix(int rows=4,int column=4);//构造矩阵
Matrix(int *mat,int rows,int column);//以一维数组构造矩阵
~Matrix(); //析构函数


int GetElem(int i,int j);  //返回第i行j列元素值
bool SetValue(int i,int j,int value);//设置第i行j列元素值为value
friend ostream& operator<<(ostream& out,Matrix &mat);//输出矩阵中所有元素
Matrix& operator+=(Matrix& mat); //当前矩阵与mat矩阵相加
Matrix(Matrix &mat);   // 以已知对象构造矩阵
Matrix operator +(Matrix& mat);  //返回当前矩阵与mat相加后的矩阵
};


void Matrix::InitiaMatrix(int rows, int columns)  //申请并初始化指定行数的
{
   if(rows<=0 || columns<=0)
 throw "异常";
    this->rows = rows;
   this->columns = columns;
   element = new int *[rows];   // 申请rows个一维数组,元素类型为int*
   for(int i=0;i<rows;i++)
   {
      element[i] = new int[columns];  //为每行申请columns个元素的一维数组,元素类型为int
 for(int j=0;j<columns;j++)
    element[i][j] = 0;
   }
}


Matrix::Matrix(int rows, int columns)  // 构造rows行columns列矩阵,元素为0 
{
   InitiaMatrix(rows,columns);
}


Matrix::Matrix(int *mat, int rows, int column)
{
   InitiaMatrix(rows,columns);
   for(int i=0;i<rows;i++)
  for(int j=0;j<columns;j++)
  element[i][j] = *(mat+i*columns+j);
}


Matrix::~Matrix()
{
   for(int i=0;i<rows;i++)  //释放动态二维数组占用的内存空间
  delete(element[i]);
   delete(element);
}


int Matrix::GetElem(int i, int j)  //返回第i行j列元素
{
   if(i>=0 && i<rows && j>=0 &&j<columns)
  return element[i][j];
   throw "矩阵元素的行或列序号越界异常";
}


bool Matrix::SetValue(int i, int j, int value)  //设置第i行j列的元素为value
{
   if(i>=0 && i<rows && j>=0 &&j<columns)
   {
       element[i][j] = value;
  return true;
   }
   return false;
}


ostream& operator <<(ostream&out, Matrix &mat)  //输出矩阵中所有元素
{
out<<"  矩阵Matrix("<<mat.rows<<"x"<<mat.columns<<"):"<<endl;
for(int i=0;i<mat.columns;i++)
{
 for(int j=0;j<mat.columns;j++)
 out<<mat.element[i][j]<<" ";
 out<<"\n";
}
return out;
}


Matrix&Matrix::operator +=(Matrix &mat)  //当前矩阵与mat矩阵相加
{
    if(this->rows == mat.rows&&this->columns==mat.columns)
{
   for(int i=0;i<mat.rows;i++)
for(int j=0;j<mat.columns;j++)
element[i][j]+=mat.element[i][j];
return *this;
}
throw "俩个矩阵介数不同,不能相加";
}


Matrix::Matrix(Matrix &mat)  //由已知对象构造矩阵对象
{
   this->rows = mat.rows;
   this->columns = mat.columns;
   this->element = new int *[rows];
   for(int i=0;i<rows;i++)
   {
       element[i] = new int[columns];
  for(int j=0;j<columns;j++)
  element[i][j] = mat.element[i][j];
   }
}


Matrix Matrix::operator +(Matrix &mat) //返回当前矩阵和mat相加后的矩阵
{
   if(this->rows==mat.rows&&this->columns==mat.columns)
   {
      Matrix mat3(*this);
 mat3 += mat;
 return mat3;
   }
  throw"俩个矩阵阶数不同,不能相加";
}

#define _CRT_SECURE_NO_WARNINGS 
#include "Matrix.h"


int main()
{
   const int M=3, N=3;


   int table1[M*N] = {0,4,3,5,1,1};
   Matrix mat1(table1,M,N);
   mat1.SetValue(2,2,1);
   int table2[M][N] = {5,2,1,1,8,1,0,0,9};
   Matrix mat2(&table2[0][0],M,N);  // 二维数组转换为一维数组构造矩阵对象
   cout<<mat1<<mat2;
   mat1+=mat2;
   cout<<"矩阵相加\n"<<mat1;
   return 0;
}


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值