Вопрос:
Мне нужно прочитать объекты класса из файла, но я не знаю, как это сделать.
Здесь у меня есть класс “Люди”,
class People{ public: string name; string surname; int years; private: People(string a, string b, int c): name(a),surname(b),years(c){} };
Теперь я хотел бы читать народы из файла.txt и хранить их на объектах класса People.
Например, так выглядит мой.txt файл:
John Snow 32 Arya Stark 19 Hodor Hodor 55 Ned Stark 00
Я думаю, что лучший способ сделать это – создать массив из 4 объектов. Мне нужно читать слово за словом и строку за строкой, если я правильно отношусь, но я не знаю, как…
Лучший ответ:
Способ сделать это состоял бы в том, чтобы составить формат хранения для вашего класса, например, если бы я сделал это, я бы сохранил информацию так же, как вы это делали
John Snow 32 Arya Stark 19 Hodor Hodor 55 Ned Stark 00
Чтобы прочитать это, вы можете сделать следующее
ifstream fin; fin.open(«input.txt»); if (!fin) { cerr << «Error in opening the file» << endl; return 1; // if this is main } vector<People> people; People temp; while (fin >> temp.name >> temp.surname >> temp.years) { people.push_back(temp); } // now print the information you read in for (const auto& person : people) { cout << person.name << ‘ ‘ << person.surname << ‘ ‘ << person.years << endl; }
Чтобы записать его в файл, вы можете сделать следующее
static const char* const FILENAME_PEOPLE = «people.txt»; ofstream fout; fout.open(FILENAME_PEOPLE); // be sure that the argument is a c string if (!fout) { cerr << «Error in opening the output file» << endl; // again only if this is main, chain return codes or throw an exception otherwise return 1; } // form the vector of people here … // .. // .. for (const auto& person : people) { fout << people.name << ‘ ‘ << people.surname << ‘ ‘ << people.years << ‘n’; }
Если вы не знакомы с тем, что vector является vector, рекомендуется использовать массив объектов, которые могут динамически развиваться в C++. Класс vector является частью стандартной библиотеки C++. И поскольку вы читаете в файле, вы не должны делать никаких предположений о том, сколько объектов будет храниться в файле раньше времени.
Но на всякий случай вы не знакомы с классами и функциями, которые я использовал в приведенном выше примере. Вот некоторые ссылки
вектор http://en.cppreference.com/w/cpp/container/vector
ifstream http://en.cppreference.com/w/cpp/io/basic_ifstream
диапазон, основанный на петле http://en.cppreference.com/w/cpp/language/range-for