读书人

问个类成员函数的有关问题

发布时间: 2013-04-09 16:45:09 作者: rapoo

问个类成员函数的问题
做到书上一道题,编写自己的Sales_item类,添加两个公用成员用于读写Sales_item对象。

头文件中类的定义如下:

#include<iostream>
#include<string>
class Sales_item2{
public:
std::istream input(std::istream &in);//返回值类型为引用类型才对,这样不对
std::ostream output(std::ostream &out) const;//同上
double avg_price() const;
private:
std::string isbn;
unsigned units_sold;
double revenue;
};


源文件1中类成员函数的定义如下:
#include"Sales_item2.h"
std::istream Sales_item2::input(std::istream &in)//同样,返回值类型应为引用类型
{
double price;
if(in>>isbn>>units_sold>>price)
revenue=units_sold*price;
else{
isbn="";
units_sold=0;
revenue=0.0;
}
return in;
}
std::ostream Sales_item2::output(std::ostream &out) const//同上
{
out<<"isbn: "<<isbn<<"\n"<<"units_sold: "<<units_sold<<"\n"
<<"revenue: "<<revenue<<std::endl;
return out;
}
double Sales_item2::avg_price() const
{
if(units_sold)
return revenue/units_sold;
else
return 0;
}


源文件2中主函数如下:
#include"Sales_item2.h"
using namespace std;
int main()
{
Sales_item2 item1;
cout<<"Please enter your information-isbn,units_sold and price:"<<endl;
while(item1.input(cin)){
cout<<"The transaction readed is:"<<endl;
item1.output(cout);
}
return 0;
}


这样是通不过调试的,问题我已经找到了,就是那两个用于读写的类成员函数的返回值类型必须是引用类型。
我想求大神解释一下,因为自己还是糊里糊涂的,说不出个为什么。谢谢!
[解决办法]
乌龟的屁股,规定。呵呵。无法被构造呗。
[解决办法]
cin cout 对象不能被显示的构造,返回引用可以级联输入输出。
当你使用cin、cout的时候其实 __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 istream cin;
你是用的是一个外部对象。
[解决办法]
其实用引用的目地就是让你能够连续使用<<或者>>在程序中你就使用了(in>>isbn>>units_sold>>price) revenue=units_sold*price;其实引用就这作用
[解决办法]
引用:
能帮我指出来吗?


std::istream Sales_item2::input

返回值是对象的都要被构造啊!

读书人网 >C++

热点推荐