实验四 运算符重载

第1关:重载双目运算符

任务描述

本关任务:有两个矩阵a,b,均为2行3列,求两个矩阵之和,重载运算符“+”为成员函数,使之用于两个矩阵相加,如c=a+b,请完成矩阵类的书写

相关知识

为了完成本关任务,你需要掌握:1.矩阵的加,2.“+”双目运算符重载。

编程要求

根据提示,在右侧编辑器补充代码,输入两个矩阵,输入矩阵的和。

测试说明

平台会对你编写的代码进行测试:

测试输入:

1 2 3

4 5 6

7 8 9

10 11 12

预期输出:

8 10 12

14 16 18

测试输入:

1 3 5

5 7 9

2 4 6

8 12 14

预期输出:

3 7 11

13 19 23 

上答案:
 

#include <iostream>
using namespace std;
/*在begin和end之间完成Matrix类的书写,其中el[2][3]为矩阵元素存储二维数组,并完成矩阵+运算符重载,display()函数完成矩阵的元素输出显示*/
/*****begin******/
class Matrix
{
    public: 
   friend Matrix operator+(Matrix &,Matrix &);
   void display(); 
   int e1[2][3]; 
};
void Matrix::display()
{for (int i=0;i<2;i++) 
  {for(int j=0;j<3;j++) 
   {cout<<e1[i][j]<<" ";} 
    cout<<endl;} 
}  
Matrix operator+(Matrix &a,Matrix &b)                //
{Matrix c; 
 for(int i=0;i<2;i++) 
   for(int j=0;j<3;j++) 
     {c.e1[i][j]=a.e1[i][j]+b.e1[i][j];} 
 return c; 
}  

/******end******/
int main()
{
    Matrix a,b,c;
   for(int i=0;i<2;i++)
       for(int j=0;j<3;j++)
       {
         cin>>a.e1[i][j];
       }
   for(int i=0;i<2;i++)
       for(int j=0;j<3;j++)
       {
          cin>>b.e1[i][j];
       }
   c=a+b;
   c.display();
}

第2关:重载单目运算符

任务描述

本关任务:定义一个复数类Complex,重载前置自增“++”运算符及后置自增“++”运算符,使之能用于复数的自增运算。 注:复数的自增是让复数的实部和虚部同时增加1.

相关知识

为了完成本关任务,你需要掌握:1.单目运算符的重载。

编程要求

根据提示,在右侧编辑器补充代码,输入复数的实部和虚部,完成自增计算并输出计算结果。

上答案:

 #include <iostream>
using namespace std;
/*********在begin和end之间填入代码,实现complex类的定义,重载前置++运算符和重载后置++运算符及display()函数********/
/***********begin*************/
class Complex
{
public:
   double real,imag;
    Complex(){real=0;imag=0;}//无参构造函数
	Complex(double r,double i){real=r;imag=i;}//有参构造函数
    void display();
    void print()
	{
		cout<<real;
		if(imag>=0)
		{cout<<"+";}
	    cout<<imag<<"i"<<endl;
	}
Complex operator++()
	{
		Complex c;
		c.real=++(this->real);
		c.imag=++imag;
		return c;
	}
Complex operator++(int)	
	{
		/*Complex c;
		c.real=(this->real)++;
		c.imag=imag++;
		return c;*/
		Complex c=*this;
		real++;
		imag++;
		return c;
	}
};

void Complex::display()
{
    if(real==0)
    {
        if(imag>0)
           cout<<imag<<"i";
        else if(imag==0)
            cout<<real;
        else
           cout<<imag<<"i";
    }
    else {
        if(imag>0)
           cout<<real<<"+"<<imag<<"i";
        else if(imag==0)
            cout<<real;
        else
           cout<<real<<imag<<"i";
       }
}

/***********end************/
int main()
{
   Complex c1,c2;
   cin>>c1.real>>c1.imag;
   c1.display();
   cout<<endl;
   ++c1;
   c2=c1++;
   c2.display();
   cout<<endl;
   c1.display();
}

第3关:重载插入运算符和流提取运算符

任务描述

本关任务:已知矩阵为2行3列,重载流插入运算符“<<”和流提取运算符">>",使之能完成矩阵的输入和输出。

相关知识

为了完成本关任务,你需要掌握:1.流插入运算符重载,2.流提取运算符重载。

编程要求

根据提示,在右侧编辑器补充代码,输入矩阵元素,输出对应矩阵元素。

测试说明

平台会对你编写的代码进行测试:

测试输入:

1 2 3

4 5 6

预期输出:

output matrix

1 2 3

4 5 6

测试输入:

1 100 1

2 34 5

预期输出:

output matrix

1 100 1

2 34 5

上答案:

 #include <iostream>
using namespace std;
//请在begin和end间完成Matrix类的编写,重载>>及<<运算符,建议重载为友元函数
/*********begin**********/
class Matrix 
{
     private:
      float data[2][3];
     public: 
      friend ostream& operator<<(ostream& os, const Matrix& matrix) 
      { 
          for(int i=0; i<2; i++) 
          { for(int j=0; j<3; j++) 
              { 
                  os << matrix.data[i][j] << " ";
                   } 
            os << endl; 
        } 
      return os; 
      } 
      friend istream& operator>>(istream& is, Matrix& matrix) 
      {
           for(int i=0; i<2; i++) 
           {
                for(int j=0; j<3; j++) 
                { is >> matrix.data[i][j]; 
                }
             } 
             return is;
     }
 };


/*********end*********/
int main()
{
    Matrix m1;
    cin>>m1;
    cout<<"output matrix"<<endl;
    cout<<m1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy*★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值