题目:
使用C++语言编写复数类,实现两个复数类对象的加法,并且将数据类型为复数类的结果返回值赋给新对象。
部分代码已给出,且只能在注释行之间作答,如下:
#include<iostream> #include<cmath> using namespace std; /********program********/ /********end********/ void Complex::print() { if(R!=0) if(I>0) cout<<R<<'+'<<I<<'i'<<endl; else if(I<0) cout<<R<<'-'<<fabs(I)<<'i'<<endl; else cout<<R<<endl; else if(I!=0) cout<<I<<'i'<<endl; else cout<<R<<endl; } int main() { double r1,i1,r2,i2; cin>>r1>>i1>>r2>>i2; Complex A(r1,i1),B(r2,i2),C(0,0); C=A.add(B); A.print(); B.print(); C.print(); return 0; }
样例:
3 4 5 6
3+4i
5+6i
8+10i--------------------------------
Process exited after 5.306 seconds with return value 0
请按任意键继续. . .
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
/********program********/
class Complex{
private:
double R,I;
public:
Complex()
{
R=0;
I=0;
}
Complex(double x1,double x2)
{
R=x1;
I=x2;
}
Complex add(Complex n);
void print();
~Complex()
{
}
};
Complex Complex::add(Complex n)
{
Complex a=*this;
a.R=a.R+n.R;
a.I=a.I+n.I;
return a;
}
/********end********/
void Complex::print()
{
if(R!=0)
if(I>0)
cout<<R<<'+'<<I<<'i'<<endl;
else if(I<0)
cout<<R<<'-'<<fabs(I)<<'i'<<endl;
else
cout<<R<<endl;
else
if(I!=0)
cout<<I<<'i'<<endl;
else
cout<<R<<endl;
}
int main()
{
double r1,i1,r2,i2;
cin>>r1>>i1>>r2>>i2;
Complex A(r1,i1),B(r2,i2),C(0,0);
C=A.add(B);
A.print();
B.print();
C.print();
return 0;
}
实现复数类的加法,有很经典的做法——编一个无返回值的成员函数add,然后在add里面分别把实部、虚部加上对象参数的实部、虚部(成员数据)。
如下 :
#include<iostream>
#include<cmath>
using namespace std;
/********program********/
class Complex{
private:
double R,I;
public:
Complex()
{
R=0;
I=0;
}
Complex(double x1,double x2)
{
R=x1;
I=x2;
}
void add(Complex n);
void print();
};
void Complex::add(Complex n)
{
R+=n.R;
I+=n.I;
}
/********end********/
void Complex::print()
{
if(R!=0)
if(I>0)
cout<<R<<'+'<<I<<'i'<<endl;
else if(I<0)
cout<<R<<'-'<<fabs(I)<<'i'<<endl;
else
cout<<R<<endl;
else
if(I!=0)
cout<<I<<'i'<<endl;
else
cout<<R<<endl;
}
int main()
{
double r1,i1,r2,i2;
cin>>r1>>i1>>r2>>i2;
Complex A(r1,i1),B(r2,i2),C(0,0);
A.add(B);
A.print();
B.print();
C.print();
return 0;
}
输出如下:
3 4 5 6
8+10i
5+6i
0
--------------------------------
Process exited after 4.309 seconds with return value 0
请按任意键继续. . .
两道题(本题和经典做法题)其实是不一样的,一前一后区别在于:
本题的
C=A.add(B);
变成了——
经典题的
A.add(B);
我们反过来看(从经典题——>本题),仅是这一点点增加(多了个C=),要求函数返回的结果要赋值给对象C,这就锁死了成员函数add();的返回类型必须和对象C一样是Complex类,而不能仍是void。。。。
难度这不就来了吗T_T