【C++OJ_静态与友元】复数运算(友元函数)
题目描述
复数类的声明如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3u1s3WFp-1651642408111)(http://images.ferryxie.cn/2022-05-04-050543.jpg)]
要求如下:
1.实现复数类和友元函数addCom和outCom。
- 参考addCom函数为复数类增加一个友元函数minusCom,用于实现两个复数的减法
3.在main函数中,通过友元函数,实现复数的加减法和复数的输出。
输入
第1行:第1个复数的实部和虚部
第2行:需进行运算的次数,注意:是连续运算。具体结果可参考样例
第3行开始,每行输入运算类型,以及参与运算的复数的实部与虚部。“+”表示复数相加,“-”表示复数相减。
输出
每行输出复数运算后的结果,复数输出格式为“(实部,虚部)”。
输入样例
10 10
3
+ 20 10
- 15 5
+ 5 25
输出样例
(30,20)
(15,15)
(20,40)
参考代码
#include <iostream>
using namespace std;
class complex
{
double real, imag; //实部和虚部
public:
complex() : real(0), imag(0) {} //无参构造函数,初始化为0
complex(double r, double i) : real(r), imag(i) {} //有参构造函数,初始化
friend complex addcom(complex c1, complex c2); //友元函数(可以访问complex类的私有成员),复数c1+c2(两参数对象相加)
friend void outcom(complex c); //友元函数,输出类对象c的有关数据
friend complex minuscom(complex c1, complex c2); //友元函数,两个复数减法,同理
};
complex addcom(complex c1, complex c2)
{
c1.real += c2.real;
c1.imag += c2.imag;
return c1;
}
complex minuscom(complex c1, complex c2)
{
c1.real -= c2.real;
c1.imag -= c2.imag;
return c1;
}
void outcom(complex c) //复数输出格式为“(实部,虚部)”
{
cout << '(' << c.real << ',' << c.imag << ")\n";
}
int main()
{
int r, i;
cin >> r >> i; //输入第1个复数的实部和虚部
complex c(r, i); //构造第一个complex类
int t; //运行次数,是连续运算
cin >> t;
while (t--)
{
char s;
cin >> s; //输入运算类型
int a, b;
cin >> a >> b; // 以及参与运算的复数的实部与虚部
complex p(a, b); //构造第二个complex类
switch (s)
{
case '+': //“+”表示复数相加
{
c = addcom(c, p);
outcom(c);
}
break;
case '-': //“-”表示复数相减。
{
c = minuscom(c, p);
outcom(c);
}
}
}
return 0;
}