#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;
}
矩阵的实现(矩阵相加)
最新推荐文章于 2024-02-24 21:18:47 发布