关于C++函数返回值为引用的一个问题

ytimex 2014-04-03 09:14:20
首先有这样一个类
class Sales_data {
friend Sales_data add(const Sales_data&, const Sales_data&);
friend std::ostream &print(std::ostream&, const Sales_data&);
friend std::istream &read(std::istream&, Sales_data&);
public:
// constructors
Sales_data() = default;
Sales_data(const std::string &s): bookNo(s) { }
Sales_data(const std::string &s, unsigned n, double p):
bookNo(s), units_sold(n), revenue(p*n) { }
Sales_data(std::istream &);

// operations on Sales_data objects
std::string isbn() const { return bookNo; }
Sales_data& combine(const Sales_data&);
double avg_price() const;
private:
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};

其中某个函数定义如下
Sales_data& 
Sales_data::combine(const Sales_data &rhs)
{
units_sold += rhs.units_sold; // add the members of rhs into
revenue += rhs.revenue; // the members of ``this'' object
return *this; // return the object on which the function was called
}

主函数
int main()
{
Sales_data data1, data2;
if (read(cin, data1) && read(cin, data2)) { // read the transactions
if (data1.isbn() == data2.isbn()) { // check isbns
data1.combine(data2); // add the transactions
print(cout, data1); // print the results
cout << endl; // followed by a newline
}
} else
cerr << "Input failed!" << endl;

return 0;
}

为什么可以用data1.combine(data2); 不是有返回值吗
...全文
184 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ytimex 2014-04-03
  • 打赏
  • 举报
回复
引用 9 楼 derekrose 的回复:
[quote=引用 6 楼 ytimex 的回复:] [quote=引用 4 楼 derekrose 的回复:] 那怎么了 有返回值 但是我不用 编译器还能削我奥?
嗯,谢谢,那是不是也可以这样声明
void combine(const Sales_data&);
然后把定义里的return *this 去掉[/quote] 如果从现有代码上看 在语法层面是可以的,但是我不认为这是一个好做法[/quote],嗯,记住了,谢谢
derekrose 2014-04-03
  • 打赏
  • 举报
回复
引用 6 楼 ytimex 的回复:
[quote=引用 4 楼 derekrose 的回复:] 那怎么了 有返回值 但是我不用 编译器还能削我奥?
嗯,谢谢,那是不是也可以这样声明
void combine(const Sales_data&);
然后把定义里的return *this 去掉[/quote] 如果从现有代码上看 在语法层面是可以的,但是我不认为这是一个好做法
ytimex 2014-04-03
  • 打赏
  • 举报
回复
引用 7 楼 mougaidong 的回复:
可以 [quote=引用 6 楼 ytimex 的回复:] [quote=引用 4 楼 derekrose 的回复:] 那怎么了 有返回值 但是我不用 编译器还能削我奥?
嗯,谢谢,那是不是也可以这样声明
void combine(const Sales_data&);
然后把定义里的return *this 去掉[/quote][/quote]谢谢
turing-complete 2014-04-03
  • 打赏
  • 举报
回复
可以
引用 6 楼 ytimex 的回复:
[quote=引用 4 楼 derekrose 的回复:] 那怎么了 有返回值 但是我不用 编译器还能削我奥?
嗯,谢谢,那是不是也可以这样声明
void combine(const Sales_data&);
然后把定义里的return *this 去掉[/quote]
ytimex 2014-04-03
  • 打赏
  • 举报
回复
引用 4 楼 derekrose 的回复:
那怎么了 有返回值 但是我不用 编译器还能削我奥?
嗯,谢谢,那是不是也可以这样声明
void combine(const Sales_data&);
然后把定义里的return *this 去掉
ytimex 2014-04-03
  • 打赏
  • 举报
回复
引用 3 楼 zxjcarrot 的回复:
返回值可以不使用的,没有规定一定要接收返回值.
嗯嗯。明白了,谢谢
derekrose 2014-04-03
  • 打赏
  • 举报
回复
那怎么了 有返回值 但是我不用 编译器还能削我奥?
无敌大饺子 2014-04-03
  • 打赏
  • 举报
回复
返回值可以不使用的,没有规定一定要接收返回值.
ytimex 2014-04-03
  • 打赏
  • 举报
回复
引用 1 楼 mougaidong 的回复:
有返回值,我也可以不关心。
不太明白。能具体点吗。书上说这个是作为左值
turing-complete 2014-04-03
  • 打赏
  • 举报
回复
有返回值,我也可以不关心。

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧