【发布时间】:2015-04-27 16:37:10
【问题描述】:
我正在尝试重载加法运算符。我想要实现的是,当item1 + item2 加在一起时,units_sold 的数量会增加,收入也会增加。在此示例中,我假设条目的 ISBN 相同。我没有在下面的代码中显示检查这一点,但我在实际代码中这样做了。也就是说,ISBN 在输出中不添加但保持不变。
问题代码:
Sales_data Sales_data::operator + (const Sales_data & data1, const Sales_data
& data2) {
return Sales_data(data1.units_sold + data2.units_sold);
return Sales_data(data1.revenue + data2.revenue);
}
我不确定我是否不能像这样使用两个返回,但不确定如何为Sales_data 变量的组件获得多个添加。这是一个说明问题的完整示例:
#include <iostream>
#include <string>
struct Sales_data {
std:: string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
// overload istream in order for cin to work
std::istream& operator >> (std::istream & in, Sales_data & cSales_data) {
in >> cSales_data.bookNo >> cSales_data.units_sold >> cSales_data.revenue;
return in;
}
// overload ostream in order for cout to work
std::ostream& operator << (std::ostream & out,
const Sales_data & cSales_data) {
out << cSales_data.bookNo << ", " << cSales_data.units_sold << ", "
<< cSales_data.revenue;
return out;
}
// addition operator rules
Sales_data Sales_data::operator + (const Sales_data & data1, const Sales_data
& data2) {
return Sales_data(data1.units_sold + data2.units_sold);
return Sales_data(data1.revenue + data2.revenue);
}
int main() {
Sales_data, item1, item2, total;
std::cin >> item1 >> item2 >> std::endl;
total = item1 + item2;
std::cout << total << std::endl;
}
我收到的错误信息是
error: ‘Sales_data Sales_data::operator+(const
Sales_data&, const Sales_data&)’ must take either zero or one argument
& data2) {
^
In function ‘int main(int, char**)’:
error: no match for ‘operator+’ (operand types are
‘Sales_data’ and ‘Sales_data’)
total = item1 + item2;
从消息中,我尝试了 data1() 和 data2() 尝试重载加法运算符,并且在同一段代码中,我尝试了 const Sales_data() 但这似乎也没有.
我也尝试过Sales_data & Sales_data::operator+,但这会产生同样的错误。
如何正确地为Sales_data 重载operator+?
【问题讨论】:
-
operator+只对两个项目进行操作:x + y将x添加到y,并产生一个结果。如果您需要在结果中表示两件事,则需要返回包含您关心的两个项目的单个项目(例如,struct)。 -
@JerryCoffin 我不明白/不知道我将如何做到这一点,或者我应该搜索哪些术语以查看相关示例。