/*用运算符的重载写矩阵的输入输出,加法,减法,乘法
用rows,cols存放行列序号,并用new动态创建float型数组,用于存储矩阵中各元素的值,并重载()读出矩阵指定位置的值*/
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class matrix{
private:
int rows;
int cols;
float* temp;
public:
matrix(int a,int b):rows(a),cols(b)
{temp=new float[8][8];} //这一步老出错
void inputm()
{
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++)
cin>>*(*(temp+i)+j);
}
/*
istream& operator>>(istream&in,matrix & m)
{
for(int i=0;i<rows;i++)
for(j=0;j<cols;j++)
cin>>*(*(temp+i)+j);
}
*/
float operator()(int r,int c) //重载(),很重要
{
return *(*(temp+r)+c);
}
//--------------------------------------以下是友元函数,并非这个类的公有函数--------------------------------------
friend matrix& operator+(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.rows==m2.rows&&m1.cols==m2.cols)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m1.cols;j++)
m3(i,j)=m1(i,j)+m2(i,j);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend matrix& operator-(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.rows==m2.rows&&m1.cols==m2.cols)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m1.cols;j++)
m3(i,j)=m1(i,j)-m2(i,j);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend matrix& operator*(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.cols==m2.rows)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m2.cols;j++)
m3(i,j)=m1(i,j)*m2(j,i);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend ostream& operator<<(ostream&out,matrix& m)
{
for(int i=0;i<m.rows;i++)
{
for(int j=0;j<m.cols;j++)
cout<<setw(9)<<m(i,j);
cout<<endl;
}
}
};
void main()
{
matrix A(2,3),B(2,3),C(3,2);
A.inputm();
B.inputm();
C.inputm();
/*cin>>A(2,3);
cin>>B(2,3);
cin>>C(3,2);*/
cout<<"A+B="<<A+B;
cout<<"A-B="<<A-B;
cout<<"A*B="<<A*B;
cout<<A+C;
}