Чтение объектов класса из файла С++

Вопрос: Мне нужно прочитать объекты класса из файла, но я не знаю, как это сделать. Здесь у меня есть класс "Люди", 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. Например,

Вопрос:

Мне нужно прочитать объекты класса из файла, но я не знаю, как это сделать.

Здесь у меня есть класс “Люди”,

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

авто http://en.cppreference.com/w/cpp/language/auto

Оцените статью
Добавить комментарий