【id:58】【20分】C. 复数运算(友元函数)
一、题目描述
复数类的声明如下:
class Complex
{
private:
double real; // 实部
double imag; // 虚部
public:
Complex();
Complex(double r, double i);
// 友元函数,复数c1 + c2(二参数对象相加)
friend Complex addCom(const Complex& c1, const Complex& c2);
// 友元函数,输出类对象c的有关数据(c为参数对象)
friend void outCom(const Complex& c);
};
要求如下:
-
实现复数类和友元函数addCom和outCom。
-
参考addCom函数为复数类增加一个友元函数minusCom,用于实现两个复数的减法
-
在main函数中,通过友元函数,实现复数的加减法和复数的输出。
二、输入与输出
1.输入
第1行:第1个复数的实部和虚部
第2行:需进行运算的次数,注意:是连续运算。具体结果可参考样例
第3行开始,每行输入运算类型,以及参与运算的复数的实部与虚部。“+”表示复数相加,“-”表示复数相减。
10 10
3
+ 20 10
- 15 5
+ 5 25
2.输出
每行输出复数运算后的结果,复数输出格式为“(实部,虚部)”。
(30,20)
(15,15)
(20,40)
三、参考代码
#include<iostream>
#include<cmath>
#include<string>
#include <iomanip>
using namespace std;
class com
{
private:
double real;
double imag;
public:
com();
com(double r,double i);
friend com add(const com&n1,const com&n2);
friend com sub(const com&n1,const com&n2);
friend void pri(const com &c);
};
com::com(double r,double i)
{
real=r;
imag=i;
}
com add(const com&n1,const com&n2)
{
com a(n1.real+n2.real,n1.imag+n2.imag);
return a;
}
com sub(const com&n1,const com&n2)
{
com b(n1.real-n2.real,n1.imag-n2.imag);
return b;
}
void pri(const com &c)
{
cout<<"("<<c.real<<","<<c.imag<<")"<<endl;
}
int main()
{
int r,i;
int num;
cin>>r>>i;
com z1(r,i);
cin>>num;
char ch;
while(num--)
{
cin>>ch;
cin>>r>>i;
com z2(r,i);
if(ch=='+')
{
z1=add(z1,z2);
}
else if(ch=='-')
{
z1=sub(z1,z2);
}
pri(z1);
}
return 0;
}
四、题解思路
考察友元函数的掌握,其本质就是可以去访问私有里面的东西。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
二维码