c++之重载+号

事情是酱紫的。就在昨天晚上,我在买星球杯的时候,突然发现一个很离谱的事情

 我寻思着我两个分开买不更便宜一点嘛?随后我当即把这个发现告诉我同学,没想到我同学的回复直接把我头笑歪了

 

这怎么能忍,当场就用一年没学的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,也就是说一起买确实划算

这一发现我愿称为《党同学的星球杯》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值