Я наткнулся на урок, в котором мы использовали определяемый пользователем тип под названием «Person», который хранит имя человека в массиве символов и возраст в виде целого числа. Урок был по написанию и чтению двоичных файлов. Основная программа выглядит так:
int main()
{
Person anil("anil",24); //initialize with name and age
fstream file("person.bin", ios::binary | ios::in | ios::out | ios::trunc);
if (!file.is_open())
cout << "Error while opening file.";
else
{
file.write((char*)&anil, sizeof(Person));
file.seekg(0); // go back to beginning
Person anjali; //declare new person object
//first argument is memory block, second argument is byte size
file.read((char*)&anjali, sizeof(Person));
anil.whoAreYou(); //outputs the name and age
anjali.whoAreYou();
}
return 0;
}
Я не понимаю, что происходит с этими строками:
file.write((char*)&anil, sizeof(Person));
file.read((char*)&anjali, sizeof(Person));
Я понимаю, что функции записи и чтения fstream требуют memory_block в качестве первого аргумента ... может ли кто-нибудь объяснить, что именно происходит, когда ссылка на определяемый пользователем тип приводится к char *?
std::string
, которые хранят данные в другом месте. Попробуйте написать правильный метод сериализации какoperator<<
, чтобы вы могли сделатьfile << anil
. - person tadman   schedule 03.12.2016