#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;
}
矩陣的實現(矩陣相加)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.