Re: [問題] 物件寫入檔案

看板C_and_CPP (C/C++)作者 (累人啊....)時間16年前 (2009/09/04 18:58), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
: 然後我在主程式上打了一些程式碼 : TruRealation TruRea; : TruRea.add(Realation(1,12)); : TruRea.add(Realation(2,11)); : TruRea.add(Realation(3,10)); : 然後我要將新增的物件寫入檔案裡,所以void Record()函式我這樣寫 : void TruRealation::Record(){ : ifstream infile(".\\abc.bin"); : infile.open(".\\abc.bin",ios::in | ios::binary); : for (list<Realation>::iterator i=Load.begin();i!=Load.end();++i){ : ?????????? : } : } 不好意思,請問一下,後來我的程式碼改成這樣 在輸入檔案的部份 void TruRealation::Record(){ ofstream outfile(".\\abc.bin",ios::out | ios::binary); if (!outfile){ cout<<"開啟檔案失敗"<<endl; return; } Realation tmp(1,1); for (list<Realation>::iterator i=Load.begin();i!=Load.end();++i){ cout<<"儲存資料至檔案"<<endl <<"AID="<<i->AID<<",BID="<<i->BID<<endl; outfile<<*i; } } 在讀取檔案資料的部份 void TruRealation::showdata(){ ifstream infile(".\\abc.bin",ios::in | ios::binary); if (!infile){ cout<<"檔案開啟失敗"<<endl; return; } Realation tmp2(1,1); //infile.read(reinterpret_cast<char*>(&tmp2),sizeof(tmp2)*Load.size()); for(int i=0;i<Load.size();++i){ cout<<"讀取資料從檔案"<<endl; infile>>tmp2; cout<<"AID="<<tmp2.AID<<",BID="<<tmp2.BID<<endl; } } 然後在原來的class內加了兩個friend function ostream& operator<<(ostream& out,Realation& vRealation){ return out << vRealation.AID <<" "<< vRealation.BID<<" "; istream& operator>>(istream& in,Realation& vRealation){ return in >> vRealation.AID >> vRealation.BID; } 以上,結果很順利的可以存取了,但有一個問題 這個方法是參考書上寫的方式,但我不解的是,若用這樣的方式 就只能在class內放置friend function嗎 或是還有其它的方法 因為個人的寫作方式比較傾向於所有東西儘量都在class內完成 儘量不要用到friend......@@ 然後上篇的推文中,l大說可以用boost::serialization方式 可以麻煩提供一下寫法嗎 再麻煩各位強者說明一下,謝謝 ※ 編輯: tyc5116 來自: 163.18.48.28 (09/04 19:09) ※ 編輯: tyc5116 來自: 163.18.48.28 (09/04 19:10)

09/04 20:56, , 1F
不需要friend啊...你根本沒有private member
09/04 20:56, 1F

09/04 20:59, , 2F
09/04 20:59, 2F

09/05 10:35, , 3F
如果你沒有加friend的話,就會變成一般的運算子啊
09/05 10:35, 3F

09/05 21:34, , 4F
So what? friend 本來就不是 mnember function 啊...
09/05 21:34, 4F
文章代碼(AID): #1AeFBMMU (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AeFBMMU (C_and_CPP)