作者tyc5116 (累人啊....)
看板C_and_CPP
标题Re: [问题] 关於operator
时间Sat Sep 19 14:08:56 2009
※ 引述《holymars ()》之铭言:
不好意思,再问一些问题
根据h大所提供的方法,我在所有class内(a和aaa)都放上重载运算子了
执行的结果,可以将资料存入档案,但却读取不出来
在输入的部份我不知道有没有写错
istream& operator>>(istream& in,aaa& vaaa){
for (list<a>::iterator i=vaaa.v.begin();i!=vaaa.v.end();++i){
in >> *i;
}
return in;
}
测试的结果,v的size是0,仔细想一下,的确会是0
因为还没读到,但我不知道该怎麽改才对
以下是之前的资料结构
: : class a{
: : vector<int> p;
: : ...
: public:
: friend ostream& operator<<(ostream& out,a& v);
: friend istream& operator>>(istream& in,a& v);
: : }
: : class aaa{
: : list<a> v;
: public:
: : friend ostream& operator<<(ostream& out,aaa& v)
: : friend istream& operator>>(istream& in,aaa& v)
: : ...
然後我现在要实作一个成员函数(方法),用来读取档案内的资料
并根据这些资料,还原成原来的物件,所以就类似这样
void aaa::OpenData(std::string *path){
//path为档案路径
ifstream infile((*path).c_str(),ios::in );
if (!infile)
MessageBox::Show("开启档案失败");
else{
infile >> *this;//这里我想应该要有if (!infile.eof()){...}
之类的东西,但我不知道该怎麽写才对@@
}
infile.close();
infile.clear();
}
以及还有另外一个问题,在class a内的vector型态若是自订的话
(我现在的型态是座标,有属性x和y)
那麽在operator上该怎麽写呢?
目前我是将它转成个别的int,存入档案,不过在读取的时候不知道该怎麽写会比较好
就像这样
ostream& operator<<(ostream& out,a& va){
out << va.ID << " "
<< va.p.size() << " ";
_Point position(0,0);
//因为一些因素,所以座标的class是自订的
int value=va.p.size();
for (int i=0;i<value;++i){
position=va.p[i];
out << position.x << " " << position.y <<" ";
//就像这样,将他分开存入
}
out << endl;
return out;
}
istream& operator>>(istream& in,TPInGra& vTPInGra){
int size=0;
_Point pos(0,0);
in >> va.ID
>> size;
/* for (int i=0;i<size;++i){
in >> va.p[i];
}*/很明显,这里会错,但我不知道要怎麽写,所以我用下列的方式
va.p.resize(size);
for (int i=0;i<size;++i){
in >> pos.x >> pos.y;
va.p[i]=pos;
}
return in;
}
以上,不过因为函数不知道该怎麽写,所以也不知道operator>>写的对不对
再麻烦高手们回答,谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.18.48.28