#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
//矩阵运算的类
class Matrix
{
private:
int row;//行
int col;//列
int **mat;//指向一级指针变量的二级指针,二级指针变量名可以看做二维数组的数组名
public:
Matrix();
Matrix(int r,int c);//构造函数
Matrix(const Matrix &m);//拷贝构造函数
friend Matrix operator+(Matrix &m1,Matrix &m2);//矩阵+矩阵
friend istream & operator>>(istream &in,Matrix &ma);//重载>>输入运算符
friend ostream & operator<<(ostream &out,Matrix &ma);//重载<<输出运算符
~Matrix();//类中有动态申请数据空间,必须显式定义析构函数
};
Matrix::Matrix()
{
row=0;
col=0;
}
Matrix::Matrix(int r,int c): row(r),col(c)
{
int i;
mat=new int *[row];//动态创建二维数组
for(i=0;i<row;i++)
mat[i]=new int[col];//动态创建每一行上的每一列
}
Matrix::~Matrix()
{
for(int i=0;i<row;i++)
delete [] mat[i];
delete [] mat;//先创建的后析构
}
//定义拷贝构造函数
Matrix::Matrix(const Matrix &m)
{ int i,j;
row=m.row;
col=m.col;
mat=new int *[row];//动态创建二维数组
for(i=0;i<row;i++)
mat[i]=new int[col];//动态创建每一行上的每一列
if(m.mat)
{for(i=0;i<row;i++)
for(j=0;j<col;j++)
mat[i][j]=m.mat[i][j];
}
}
//矩阵+矩阵
Matrix operator+(Matrix &m1,Matrix &m2)
{ Matrix m3(m1.row,m1.col);
int i,j;
if((m1.row==m2.row)&&(m1.col==m2.col))//判断两个矩阵是否为行数列数相同的矩阵,若是,就进行对应元素相加
{
for(i=0;i<m1.row;i++)
for(j=0;j<m1.col;j++)
m3.mat[i][j]=m1.mat[i][j]+m2.mat[i][j];
}
return m3;
}
istream &operator >>(istream &in,Matrix &ma)
{ int i,j;
cout<<"Please input the Matrix:"<<endl;
for(i=0;i<ma.row;i++)
{
cout<<"输入第 "<<i+1<<" 行:"<<endl;
for(j=0;j<ma.col;j++)
in>>ma.mat[i][j];
}
return in;
}
ostream &operator <<(ostream &out,Matrix &ma)
{ int i,j;
cout<<"The Matrix is:"<<endl;
for(i=0;i<ma.row;i++)
{ for(j=0;j<ma.col;j++)
out<<setw(5)<<ma.mat[i][j];
cout<<endl;
}
return out;
}
int _tmain(int argc, _TCHAR* argv[])
{
Matrix m1(2,3),m2(2,3);
cin>>m1;
cout<<m1;
cin>>m2;
cout<<m2;
cout<<"m1+m2="<<m1+m2;
return 0;
}
c++通过运算符重载实现两个矩阵相加
猜你喜欢
转载自blog.csdn.net/qq_43090158/article/details/86211935
今日推荐
周排行