Я хочу поместить свой двойной связанный список студентов в файл, а затем прочитать их. Мой двойной связанный список работает отлично, имеет каждую важную функцию. Для этой задачи может быть:
void addToChain(Student& BeeingAddedStudent);
void removeLastLink();
int howManyLinks();
friend ostream& operator << (ostream&, Chain&);
friend ofstream& operator << (ofstream&, Chain&);
Студент выглядит так:
class Student
{
string First;
string Last;
string* Classes; //array of classes student attend **(MAY BE PHRASES WITH FEW WORDS)**
int Id, N; //student ID in university system and number of classes
double Avg; //average grade
public:
Student();
Student(Student&);
~Student();
... //Full list of accessors
Student& operator=(Student&);
friend ostream& operator << (ostream&, Student&);
friend ofstream& operator << (ofstream&, Student&);
}
Теперь, как вы думаете, лучший выбор для хранения этих объектов? Я не хочу иметь представление о файле. Не могли бы вы объяснить мне, как обменивать эти объекты с файлами? Я знаю основные команды, но не знаю, какие методы fstream я должен использовать. Вот, с чего я начал, поэтому ваш ответ может быть коротким и всеобъемлющим:
void Chain::saveToFile()
{
ofstream file;
file.open("Data.cha");
file << *this;
file.close();
}
void Chain::loadFromFile()
{
while (StartLink->Essence != NULL)
this->removeLastLink();
ifstream file;
file.open("Data.cha");
Student current;
while (!EOF)
{
//I have no idea, what should i put here...
}
}
Как вы видите, я начал работать с текстовыми файлами, но если вы думаете, что это хорошо, я буду любить менять его на двоичный...
"Лучший выбор" зависит от того, что вы высоко цените.
Вы можете добавить в класс /fromBinaryFile методы для своего класса, для которых вам нужно будет определить макет памяти массива байтов. Это должно быть самым быстрым.
Вы можете добавить методы /fromText к вашему классу, для чего вам придется определять текстовые представления. Это будет терпимо относиться к изменениям во внутреннем представлении, но преобразование в текст и из него требует дополнительных усилий. Он также (как правило) требует немного больше места на диске.
Вы можете определить макет XML и использовать некоторую библиотеку XML для чтения и записи XML-документов. Это самое сложное, но вы будете свободны от всех забот о текстовом представлении, и данные будут готовы к взаимозависимости с любой другой программой, способной читать/писать XML, и есть такие приятные вещи, как XSLT. В некотором смысле, это также будет терпимым к расширениям вашего класса.
string S; int I;
, как я могу это сделать?