事情是酱紫的。就在昨天晚上,我在买星球杯的时候,突然发现一个很离谱的事情
我寻思着我两个分开买不更便宜一点嘛?随后我当即把这个发现告诉我同学,没想到我同学的回复直接把我头笑歪了
这怎么能忍,当场就用一年没学的c++证明一下19.8+19.5==40.3
证明思路如下:
我们首先定义一个星球杯的类,由于这个类不能用中文,所以我们先#define一下,也就是
#define 星球杯 PlanetCup
接下来我们再给星球杯赋一个属性,叫val,因为后面有小数点,所以我们用double,同时将val设置成为私有属性,定义属性类的内容如下。
class 星球杯 {
private: double val;
};
这时因为将val设置了私有属性,所以我们需要对外提供接口,以及重写构造函数和析构函数,并在类外实现构造函数和析构函数。代码如下
class 星球杯 {
private: double val;
public:
星球杯(double val);
double getA();
~星球杯();
};
double 星球杯::getA()
{
return this->val;
}
星球杯::星球杯(double val)
{
this->val = val;
}
星球杯::~星球杯(){}
接着我么需要重载一下加号,重载的关键词为operator,然后返回的类型是星球杯的类型,接着我们需要思考有没有参数?由于我们需要两个星球杯相加,加号的左边和右边都是星球杯类型,所以我们需要传入一个参数,参数很明显就是星球杯类型。所以我们很容易把函数体给构建出来,也就是
星球杯 operator+(星球杯 temp)
{
}
那么里面我们怎么写呢,因为我们要将两者的val值相加起来返回第三个值,所以我们需要定义一个第三方变量,类型是星球杯,然后再将两者的val值相加之后赋值给第三方,最后将第三方变量返回就行了。代码如下
星球杯 operator+(星球杯 temp)
{
星球杯 res(val);
res.val += temp.val + 1;
return res;
}
最后整个代码如下
#include<iostream>
using namespace std;
#define 星球杯 PlanetCup
class 星球杯 {
private: double val;
public:
星球杯(double val);
星球杯 operator+(星球杯 temp)
{
星球杯 res(val);
res.val += temp.val + 1;
return res;
}
double getA();
~星球杯();
};
double 星球杯::getA()
{
return this->val;
}
星球杯::星球杯(double val)
{
this->val = val;
}
星球杯::~星球杯(){}
int main()
{
double a, b;
cout << "请输入第一个星球杯的价格" << endl;
cin >> a;
cout << "请输入第二个星球杯的价格" << endl;
cin >> b;
星球杯 *x1 = new 星球杯(a);
星球杯 *x2 = new 星球杯(b);
星球杯 x3= *x1 + *x2;
cout <<"总价格为"<< x3.getA() << endl;
return 0;
}
我们来看一下运行效果
最后得出结论:19.8+19.5==40.3,也就是说一起买确实划算
这一发现我愿称为《党同学的星球杯》