c++重载运算符
编写一个矩阵类Matrix,并重载运算符“+”、“-”、“”、“>>”、“<<”来分别实现矩阵的加法、减法、乘法,以及标准流输入和流输出操作。
输入格式 第一个矩阵的行r和列c,中间用一个空格隔开
输入第一个矩阵,输入矩阵时,每行输入c个元素,中间用一个空格隔开,总共输入r行。
第二个矩阵的行r和列c,中间用一个空格隔开
输入第二个矩阵,输入矩阵时,每行输入c个元素,中间用一个空格隔开,总共输入r行。
输出格式 重载“<<”时,输出间隔为6,即setw(6)。进行“+”、“-”运算的两个矩阵,行列数不相等时,输出 “invalid operation!”,并且退出程序,即exit(1)。进行“”运算的两个矩阵,左边矩阵的列数不等于右边矩阵的行时,输出 “invalid operation!”,并且退出程序,即exit(1)。
代码如下
#include
#include
#include
using namespace std;
class Matrix{
private:
int r,c;
double a[200][200] ;//= {{0}} ;
//int **a;
public:
Matrix()
{
r = 0;c = 0;
}
Matrix(int r1,int c1)
{
r = r1;
c = c1;
//a = new int[100][100];
}
friend istream& operator>>(istream& cin,Matrix& m)
{
for(int i = 0; i<m.r ;i++)
{
for(int j = 0 ;j<m.c ;j++)
{
cin>>m.a[i][j];
}
}
return cin;
}
friend ostream& operator<<(ostream& cout,const Matrix& m)
{
for(int i = 0; i<m.r ;i++)
{
for(int j = 0 ;j<m.c ;j++)
{
cout<<setw(6)<<m.a[i][j];
}
cout<<endl;
}
return cout;
}
const Matrix& operator+(const Matrix& m)
{
if(this->c !=m.c ||this->r !=m.r )
{
cout<<"invalid operation!";
exit(1);
}
Matrix result(0,0);
result.c = m.c ;
result.r = m.r ;
for(int i = 0; i<this->r ;i++)
{
for(int j = 0 ;j<this->c ;j++)
{
result.a [i][j] = this->a [i][j] + m.a [i][j];
}
}
return result;
}
const Matrix& operator-(const Matrix& m)
{
if(this->c !=m.c ||this->r !=m.r )
{
cout<<"invalid operation!";
exit(1);
}
Matrix result(0,0);
result.c = m.c ;
result.r = m.r ;
for(int i = 0; i<this->r ;i++)
{
for(int j = 0 ;j<this->c ;j++)
{
result.a [i][j] = this->a [i][j] - m.a [i][j];
}
}
return result;
}
const Matrix operator*(const Matrix& m)
{
if(this->c !=m.r )
{
cout<<"invalid operation!";
exit(1);
}
Matrix result(0,0);
result.c = m.c ;
result.r = m.r ;
for(int i = 0; i < this->r ;i++)
{
for(int j = 0;j<m.c ;j++)
{
for(int h = 0; h<this->c;h++)
{
result.a [i][j] += this->a [i][h]*m.a [h][j];
}
}
}
return result;
}
} ;
int main() {
int r,c;
cin>>r>>c;
if(r<1 || c<1){
cout<<"Input error."<<endl;
exit(1);
}
Matrix A(r,c);
cin >> A;
cin>>r>>c;
if(r<1 || c<1){
cout<<"Input error."<<endl;
exit(1);
}
Matrix B(r,c);
cin >> B;
cout<<"A + B:"<<endl;
cout << A + B <<endl;
cout<<"A - B:"<<endl;
cout << A - B <<endl;
cout<<"A * B:"<<endl;
cout << A * B <<endl;
return 0;
}