第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;
}