C++ 重载+;=连锁经营
假设我有:C++ 重载+;=连锁经营,c++,vector,overloading,C++,Vector,Overloading,假设我有: class Date { int year, month, day; } 我有+操作符重载: friend CDate operator +(const Date &leftDate, const Date &rightDate) {} 我用右边的日期来增加左边的日期。那部分似乎有用 现在我想重载+=,如果我所做的只是date+=另一个\u日期,这就很简单了 但是,如果我必须链接它,例如:date+=另一个日期+另一个日期\u2我必须创建一个向量,其中将存
class Date {
int year, month, day;
}
我有+
操作符重载:
friend CDate operator +(const Date &leftDate, const Date &rightDate) {}
我用右边的日期来增加左边的日期。那部分似乎有用
现在我想重载+=
,如果我所做的只是date+=另一个\u日期
,这就很简单了
但是,如果我必须链接它,例如:date+=另一个日期+另一个日期\u2
我必须创建一个向量,其中将存储另一个日期和另一个日期2
,然后按顺序对它们进行添加:
Date& Date::operator +=(const vector<Date> &dates) {
for(auto date: dates) {
this->year += date.year;
this->month += date.month;
this->day += date.day;
}
return *this;
}
日期和日期::运算符+=(常量向量和日期){
用于(自动日期:日期){
本->年+=日期.年;
本->月+=日期.月;
此->天+=日期.day;
}
归还*这个;
}
我现在正在努力解决的问题是如何重载它返回向量的+
操作符
到目前为止,我的想法是:
向量运算符+(const Date&Date)
:在哪里创建向量?为了插入日期
,我必须创建一个
向量运算符+(向量和日期,常量日期和日期)
:类似的问题,我还没有创建向量
那么如何重载+
运算符,使其返回向量呢?当您使用
date += another_date + another_date_2;
它被解释为:
date += (another_date + another_date_2);
我想这正是你想要的
不需要对象的向量
你也可以使用
date += (another_date + another_date_2 + another_date_3 + another_date_4 + ...);
同样,当您使用时,不需要对象的向量。
date += another_date + another_date_2;
它被解释为:
date += (another_date + another_date_2);
我想这正是你想要的
不需要对象的向量
你也可以使用
date += (another_date + another_date_2 + another_date_3 + another_date_4 + ...);
再一次,不需要对象的向量。实际上,您可以使用单片+
/+=
-运算符实现您想要的功能,如Sahu所示,运算符只取日期
参数,只返回日期
对象
如果-出于任何原因,可能不是出于您问题中所示的情况-您确实希望+
-运算符仅收集参数并返回向量,您可以通过以下方式实现:
class Date {
public:
int year, month, day;
Date& operator +=(const vector<Date> &dates) {
for(auto date: dates) {
this->year += date.year;
this->month += date.month;
this->day += date.day;
}
return *this;
}
};
vector<Date> operator +(const Date &leftDate, const Date &rightDate) {
vector<Date> result;
result.push_back(leftDate);
result.push_back(rightDate);
return result;
}
vector<Date> operator +(const vector<Date> &left, const Date &rightDate) {
vector<Date> result = left;
result.push_back(rightDate);
return result;
}
int main(void)
{
// vector<Date> rhs = Date { 2,2,2 } + Date { 3,3,3 } + Date { 4,4,4 };
Date d = { 1,1,1 };
d += Date { 2,2,2 } + Date { 3,3,3 } + Date { 4,4,4 };
return 0;
}
上课日期{
公众:
整数年、月、日;
日期和运算符+=(常量向量和日期){
用于(自动日期:日期){
本->年+=日期.年;
本->月+=日期.月;
此->天+=日期.day;
}
归还*这个;
}
};
向量运算符+(常量日期和左日期、常量日期和右日期){
矢量结果;
结果。向后推_(leftDate);
结果。推回(rightDate);
返回结果;
}
向量运算符+(常量向量和左、常量日期和右日期){
向量结果=左;
结果。推回(rightDate);
返回结果;
}
内部主(空)
{
//向量rhs=日期{2,2,2}+日期{3,3,3}+日期{4,4};
日期d={1,1,1};
d+=日期{2,2,2}+日期{3,3,3}+日期{4,4,4};
返回0;
}
实际上,您可以使用单片+
/+=
-运算符实现您想要的功能,这些运算符只接受日期
参数,只返回日期
对象,如Sahu所示
如果-出于任何原因,可能不是出于您问题中所示的情况-您确实希望+
-运算符仅收集参数并返回向量,您可以通过以下方式实现:
class Date {
public:
int year, month, day;
Date& operator +=(const vector<Date> &dates) {
for(auto date: dates) {
this->year += date.year;
this->month += date.month;
this->day += date.day;
}
return *this;
}
};
vector<Date> operator +(const Date &leftDate, const Date &rightDate) {
vector<Date> result;
result.push_back(leftDate);
result.push_back(rightDate);
return result;
}
vector<Date> operator +(const vector<Date> &left, const Date &rightDate) {
vector<Date> result = left;
result.push_back(rightDate);
return result;
}
int main(void)
{
// vector<Date> rhs = Date { 2,2,2 } + Date { 3,3,3 } + Date { 4,4,4 };
Date d = { 1,1,1 };
d += Date { 2,2,2 } + Date { 3,3,3 } + Date { 4,4,4 };
return 0;
}
上课日期{
公众:
整数年、月、日;
日期和运算符+=(常量向量和日期){
用于(自动日期:日期){
本->年+=日期.年;
本->月+=日期.月;
此->天+=日期.day;
}
归还*这个;
}
};
向量运算符+(常量日期和左日期、常量日期和右日期){
矢量结果;
结果。向后推_(leftDate);
结果。推回(rightDate);
返回结果;
}
向量运算符+(常量向量和左、常量日期和右日期){
向量结果=左;
结果。推回(rightDate);
返回结果;
}
内部主(空)
{
//向量rhs=日期{2,2,2}+日期{3,3,3}+日期{4,4};
日期d={1,1,1};
d+=日期{2,2,2}+日期{3,3,3}+日期{4,4,4};
返回0;
}
将2018年3月17日增加到2017年4月6日的结果是什么?换句话说,为了让算术有意义,您需要两种不同的类型:一种表示日期,如2018年3月17日;另一种表示持续时间,如两年。date-date=(2018年1月1日);日期+=年(3)+月(3)
,其中年(3)
将返回(3,0,0)
的日期对象。很抱歉,我不清楚。将2018年3月17日添加到2017年4月6日的结果是什么?换句话说,为了让算术有意义,您需要两种不同的类型:一种表示日期,如2018年3月17日;另一种表示持续时间,如两年。date-date=(2018年1月1日);日期+=年(3)+月(3)
,其中年(3)
将返回(3,0,0)
的日期对象。对不起,我不清楚。AFAIKa+=b+c
是(a+=b)+=c
,所以我需要一个向量,在那里存储b
和c
,然后按顺序对它们执行+
。@LeNguyenDuyAnh,不。a+=b+c
是a+=(b+c)
。请查看上的cppreference.com页面。同样a+=b+=c
是a+=(b+=c)
AFAIKa+=b+c
是(a+=b)+=c
,因此我需要一个向量,其中存储b
和c
,然后按顺序对它们执行
。@LeNguyenDuyAnh,否。a+=b+c
。查看上的cppreference.com页面。另外a+=b+=c
isa+=(b+=c)