c++重载运算符

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;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值