返回信息流比如现在有这样一个类
class person
{
public :
string name;
int age;
friend istream& operator >> (istream& in, person &sh) ;
}sk;
istream& operator >> (istream& in, person &sh)
{
cin>>sh.name>>sh.age;
return in;
}
我是这样弄的:
string name;
int age;
char ch;
int p;
ifstream indata("e:\\person.txt",ios_base::in);
indata.get(ch);//这一块是读一个string类型的数
while(ch!='\n')
{
name+=ch;
indata.get(ch);
}
indata.get(ch);
indata.get(p)//这一句定义的有问题,顺便问一下怎样读一个整数?
//下面就是怎样将name和age赋给类中的变量了?请问这该怎么写?
这是一条镜像帖。来源:北邮人论坛 / cpp / #26095同步于 2009/7/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请问;c++中如何使用重载运算符>>从一个文件中读取数将它赋给一
Parid
2009/7/10镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
你对流的概念还不清楚
istream& operator >> (istream& in, person &sh)
{
cin>>sh.name>>sh.age; //这里不应该是cin 而应该是in.
return in;
}
比如说 你这样用 cin >> person, 实际上等于这样 >>(cin, person) 把">>"看成一个函数名
应为ifstream是istream的派生类, 所以你就可以这样用:
ifstream fin("e:\\person.txt",ios_base::in);
person p
fin >> p;
受教了,不过上面应该为“fin>>p”。我现在想问的是如果文件中针对每个类的数据是在一行,中间以','隔开的话。比如:askdlfsa,12'\n'那用你上面的方法不就将所有的字符都读到name中了,而age中却不能读数据,请问这种情况该怎样解决?
我是用一个char型的字符一个一个从文件读,然后将读到的字符叠加,直到遇到‘,’停止,正如上面我写的:
ifstream indata("e:\\person.txt",ios_base::in);
indata.get(ch);//这一块是读一个string类型的数
while(ch!='\n')
{
name+=ch;
indata.get(ch);
}
可是这种读出name和age后,我却不能将他们的值用>>重载赋给类中的变量。请问有没有什么解决办法?或者用没有什么好的别的方法可以解决?
说详细点?没明白怎么用?我也用过getline,不过那是从键盘中读的时候,我输入一个字符串然后回车在读另一个,我是这样用的:getline(cin,name)
可是现在要从文件中读啊?
friend istream& operator>>(istream& ist,book& newBook)
{
getline(ist,newBook.name,',');
getline(ist,newBook.writer,',');
getline(ist,newBook.publisher,',');
getline(ist,newBook.time,'\n');
return ist;
}
我觉得我们做的是一个程序,你问的问题都是我想问的,只不过,我的已经解决了~
这个重载你应该可以看懂吧,book类如下:
class book
{
private:
string name;
string writer;
string publisher;
string time;
public:
…………
}