标签:链接 http 思路 调用 names 问题: 数据 空格 不能
题目来源:
WZOI
解题思路:
由于本人是真的小白,这题之前只接触过几次结构体定义class,更别提什么重载运算符了。
我只能讲讲自己的见解,不一定完全准确,有错误欢迎指出,仅供参考!
1.定义一个【复数类comp】
2.在comp中,定义【初始化函数add】【输出函数Print】【重载运算符"+"】,每个comp变量有【实部a(int)】与【虚部b(int)】
3.输入m,重复m次输入m*2组数据【xs】【ys】,分别表示待相加的实部与虚部
4.重复m次进行相加,输出
定义:
class comp{//定义comp类 public://公共部分,即每个comp类都通用的 void add(int x,int y){ this->a=x; this->b=y; } /* 这个函数应该这样用:A.add(x,y); 其中A为comp类变量 this所指的是A,那么this->a就是A的a,以此类推 */ void Print(){ cout<<this->a<<(this->b>0?‘+‘:‘-‘)<<abs(this->b)<<"i\n"; } /* 三目运算符:当this->b大于0时,取‘+‘,否则取‘-‘ 可以直接当一个量用,而且不用大段的if 然后输出this->b的绝对值(abs函数,调用cmath库) 关于为什么要绝对值的问题: 因为三目运算符的负号如果换成空字符‘‘就会报错,‘\0‘会多个空格 所以不能直接输出负数 */ comp operator+(comp& n){ comp m; m.a = this->a+n.a; m.b = this->b+n.b; return m; } /* 重载运算符+: 跟函数有些类似不过更加简单 在当中新建一个comp类的m, 然后计算(this指加号前的comp变量,n指加号后的comp变量), 最后返回结果,就是一个comp类的m。 */ private: int a; int b; };
代码实现:
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 class comp{ 5 6 public: 7 void add(int x,int y){ 8 this->a=x; 9 this->b=y; 10 } 11 void Print(){ 12 cout<<this->a<<(this->b>0?‘+‘:‘-‘)<<abs(this->b)<<"i\n"; 13 } 14 comp operator+(comp& n){ 15 comp m; 16 m.a = this->a+n.a; 17 m.b = this->b+n.b; 18 return m; 19 } 20 private: 21 int a; 22 int b; 23 }; 24 int main(){ 25 int m,xs[255]={0},ys[255]={0}; 26 cin>>m; 27 for(int i=0;i<m;i++) 28 cin>>xs[i*2]>>ys[i*2]>>xs[i*2+1]>>ys[i*2+1]; 29 //输入xs,ys,一次两组 30 comp a1,a2,a3; 31 for(int i=0;i<m;i++){ 32 a1.add(0,0); 33 a2.add(0,0); 34 a3.add(0,0); 35 /* 36 初始化a1,a2,a3,可以理解为上一个人用了水杯喝水, 37 然后把水杯洗干净再用 38 */ 39 a1.add(xs[i*2],ys[i*2]); 40 a2.add(xs[i*2+1],ys[i*2+1]); 41 a3=a1+a2;//运算 42 a3.Print();//输出 43 } 44 }
参考内容:
关于重载运算符:https://www.runoob.com/cplusplus/cpp-overloading.html(RUNOOB)
标签:链接 http 思路 调用 names 问题: 数据 空格 不能
原文地址:https://www.cnblogs.com/wingtown/p/wzoi_P2330_key_CPP.html