由cin给类对象赋值怎么写

DreamMakers 东南大学 高级Java开发工程师  2011-08-31 04:48:41
主函数中有语句
sales_item book;
cin>>book;
cout<<book<<endl;

sales_item是一个类,含有属性ISBN(序列号),num_copy(卖出的数目)和average(卖出时的均价)

怎样编写sales_item可以满足输入:
1-2-222-3 10 12.99
输出
1-2-222-3 10 12.99

我不太懂,book对象还能一次性由cin赋值吗?
...全文
191 点赞 收藏 14
写回复
14 条回复
ken_scott 2011年09月01日

#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::istream;
using std::ostream;

class SaleItem
{
public:
SaleItem() : m_iSaleCount(0), m_dSaleAvgPrice(0) {

}

SaleItem(int iSaleCount, double dSaleAvgPrice, const string & strIndex)
: m_iSaleCount(iSaleCount), m_dSaleAvgPrice(dSaleAvgPrice), m_strIndex(strIndex) {

}

friend istream & operator >> (istream & is, SaleItem & saleItem);
friend ostream & operator << (ostream & os, const SaleItem & saleItem);

private:
int m_iSaleCount;
double m_dSaleAvgPrice;
string m_strIndex;
};

istream & operator >> (istream & is, SaleItem & saleItem) {
return (is >> saleItem.m_strIndex >> saleItem.m_iSaleCount >> saleItem.m_dSaleAvgPrice);
}

ostream & operator << (ostream & os, const SaleItem & saleItem) {
return (os << saleItem.m_strIndex << ' ' << saleItem.m_iSaleCount << ' ' << saleItem.m_dSaleAvgPrice);
}

int main()
{
SaleItem book;
cin >> book;
cout << book;
return 0;
}
回复 点赞
shenyan008 2011年09月01日
需要重载流操作符,但不能是成员操作符,因为左操作符是流,而不是该类对象。
所以需要把该重载函数声明为该类的Friend。
回复 点赞
LZS535261548 2011年08月31日
重载流操作符号
回复 点赞
dark_cool 2011年08月31日
恩运算符重载可以解决
回复 点赞
未注销 2011年08月31日
重载。
回复 点赞
liutengfeigo 2011年08月31日
推荐 C++ primer plus
回复 点赞
苍蝇1号 2011年08月31日
重载操作符》
回复 点赞
taodm 2011年08月31日
楼主还是要买本教材补补基础吧。
回复 点赞
pathuang68 2011年08月31日
[Quote=引用楼主 andamajing 的回复:]
主函数中有语句
sales_item book;
cin>>book;
cout<<book<<endl;

sales_item是一个类,含有属性ISBN(序列号),num_copy(卖出的数目)和average(卖出时的均价)

怎样编写sales_item可以满足输入:
1-2-222-3 10 12.99
输出
1-2-222-3 10 12.99

我不太懂,bo……
[/Quote]

重载 >> 操作符即可。

可参考:
运算符重载小结
回复 点赞
chenyu964877814er 2011年08月31日
[Quote=引用 1 楼 weixiaoshashou 的回复:]
在你的类里面重载流操作符
[/Quote]
正解...通过定义一个友元函数...重载>>操作符....这样也能保证类的封装性完好...最好封装起来,不然就没有c++的感觉了....
回复 点赞
十八道胡同 2011年08月31日
需要sales_item 里面重载>> 和<<操作符
回复 点赞
weixiaoshashou 2011年08月31日
哦写错了

friend istream &operator >> (istream&,sales_item &);


回复 点赞
weixiaoshashou 2011年08月31日
如 friend ostream &operator >> (istream&,sales_item &);
回复 点赞
weixiaoshashou 2011年08月31日
在你的类里面重载流操作符
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告