华科CPP慕课SPOC期末No.3

文章讨论了如何在C++中创建一个复数类,并实现两个复数对象的加法操作。原来的实现方式是通过一个返回值为Complex的成员函数add,而另一种经典做法则是通过无返回值的add函数直接修改调用对象的实部和虚部。两种方法的区别在于是否需要返回一个新的复数对象。文章通过例子展示了这两种方法的使用和输出结果。
摘要由CSDN通过智能技术生成

题目:

使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

季风13

谢谢认可

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

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

打赏作者

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

抵扣说明:

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

余额充值