Что-что тебе надо? Знакомый пример, кажется из лафорье. Во-первых тебе нужно сделать так, чтобы файл, в который ты сохраняешь, был не констатным, а ты мог другой выбирать. Тогда создай другой список, укажи файл заранее созданный и грузи список. Но на мой взгляд эти две фунции работы с файлом надо вынести из определения класса (но они все равно останутся интерфейсом класса, так как там будет упоминаться список). Эти фунция - это сериализация / десерилизация. И где твой деструктор? Лишняя память завелась?
| Код | using namespace std;
//////////////////////////////////////////////////////////////// struct link //one element of list { int data; //data item link* next; //pointer to next link link(int a_data, link* a_next):data(a_data), next(a_next) {} }; //////////////////////////////////////////////////////////////// class linklist //a list of links { private: link* first; //pointer to first link public: linklist():first(0) {} //no-argument constructor link* begin() const; void additem(int d); //add data item (one link) void display() const; //display all links ~linklist(); };
link* linklist::begin() const { return first; }
void linklist::additem(int d) //add data item { first = new link(d, first); }
void linklist::display() const //display all links { cout << endl; link* current = first; //set ptr to first link while(current) //quit on last link { cout << current->data << endl; //print data current = current->next; //move to next link } cout << endl; }
linklist::~linklist() { link* current = first; while (current) { link* prev = current; current = current->next; delete prev; } }
void diskOut(ofstream& outfile, const linklist& list) { link* current = list.begin(); while(current) { int data = current->data; outfile.write( reinterpret_cast<char*>(&data), sizeof(int) ); current = current->next; } } void diskIn(ifstream& infile, linklist& list) { int d = 0; infile.seekg(0); infile.read( reinterpret_cast<char*>(&d),sizeof(int) ); while( !infile.eof() ) { list.additem(d); infile.read( reinterpret_cast<char*>(&d),sizeof(int) ); } }
int main(int argc, char argv[]) { linklist list; list.additem(10); list.additem(23); list.additem(25); std::ofstream out_file("d:\\mylist.dat"); diskOut(out_file, list); out_file.close(); std::ifstream in_file("d:\\mylist.dat"); linklist new_list; diskIn(in_file, new_list); new_list.display(); cin.get(); return 0; }
|
|