#include <iostream>
#include <fstream>
std::ostream& operator<< (std::ostream& os, const PERSON& value )
{
// here, you decide how the output format should look like. See below.
// ...
return os;
}
std::istream& operator>> (std::istream& is, PERSON& value )
{
// here, you do the reverse of what you chose in operator<<(). See below.
// ...
return is;
}
Хотя вы сможете быстро взломать реализацию этих двух функций, стоит подумать о требованиях, которые вы хотите выполнить:
- Техническое обслуживание? Что произойдет с вашими файлами в будущем, когда вы смените ЛИЦА (например, дополнительные поля)? Вы все еще хотите использовать эти старые файлы?
- Надежность. Придется ли вам уделять внимание локализации? Что произойдет, если ваш первый китайский студент прибудет с именем кандзи? Вам нужна кодировка utf8 или подобное? Будете ли вы сталкиваться с «пропущенными значениями»?
- Масштабируемость? Вы закончите писать свою собственную маленькую базу данных со своим собственным SQL для последующего запроса для подмножеств людей? Сможете ли вы прочитать весь файл, если он превзойдет все ожидания? Будут ли поступать новые файлы с другими данными, и позже возникнет необходимость их связать? (ВНЕШНЕЕ СОЕДИНЕНИЕ, ВНУТРЕННЕЕ СОЕДИНЕНИЕ, ...)
Как видно из этого короткого и, конечно, неполного списка, вы находитесь на перекрестке: используйте вместо этого базу данных? Использовать стандартный формат сериализации, такой как XML или JSON, или буферы протокола, или FastNProto, или что-нибудь еще модное сегодня? Или просто идти вперед и делать свое дело, так как все это быстро и грязно?
Теперь к практическим вещам:
Внутри вашего operator<<
вы можете «сбросить» ваши элементы следующим образом (придерживаясь того, что вы написали в вопросе):
os << "name: " << value.name.c_str()
<< ", surname: " << value.surname.c_str()
<< ", age: " << value.age
<< std::endl;
И чтобы прочитать его обратно, вы соответственно реализуете operator>>
.
std::string tag;
is >> tag; // optionally make sure it is "name:"
is >> value.name;
// ... (The commas might need some fiddling... well you wanted help not a full solution...)
Затем все, что вам нужно сделать, это проверить его, например, используя поток строк, сериализовать человека, прочитать его в другой экземпляр и сравнить. И ты должен быть готов;)