我们说我有:
class Date {
int year, month, day;
}
我的+
运算符重载:
friend CDate operator +(const Date &leftDate, const Date &rightDate) {}
我在左边日期增加了正确的日期。那部分似乎有效。
现在我想重载+=
,如果我所做的只是date += another_date
,这是微不足道的。
但是,如果我必须将其链接起来,例如:date += another_date + another_date_2
我必须创建一个向量,其中another_date
和another_date2
将被存储,然后为每个向量添加顺序:
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;
}
我现在正在努力的部分是如何重载+
运算符,它返回一个向量?
到目前为止我的想法:
vector<Date> operator +(const Date &date)
:我在哪里创建一个向量?我必须创建一个才能插入date
。vector<Date> operator +(vector<Date> &dates, const Date &date)
:类似的问题,到目前为止我还没有创建过矢量。那么如何重载+
运算符,它会返回一个向量?
答案 0 :(得分:5)
使用时
date += another_date + another_date_2;
它被解释为:
date += (another_date + another_date_2);
我认为这正是你想要的。
不需要vector
个对象。
您也可以使用
date += (another_date + another_date_2 + another_date_3 + another_date_4 + ...);
再一次,不需要vector
个对象。
答案 1 :(得分:0)
实际上,您可以通过单片+
/ +=
来实现您想要的效果 - 运算符仅采用Date
个参数并仅返回Date
个对象,如Sahu所示。
如果 - 由于任何原因可能不是你问题中显示的情况所驱动的 - 你真的希望+
- 运算符只收集参数并返回一个向量,你可以按如下方式实现:< / p>
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;
}