首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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

问个类成员函数的问题
做到书上一道题,编写自己的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

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

热点排行