Let me give you an example Save load for a simple Pet Game.
Let's assume you have a Pet class. In this class it has the pet's age (based on days), it's health, and it's happiness. let's also assume it has an inventory of items which are unique based on some unique int ID. Let's also add a Save() and Load() function. At it's definition, it may look like this:
#include "TItem.h" enum THappiness { SAD_PET, CONTENT_PET, HAPPY_PET }; class TPet { private: int Age; int Health; std::string Name; THappiness Happiness; std::vector<TItems> Inventory; public: TPet(std::string petName); ~TPet(); void AddItem(TItem item); std::vector<TItems> GetInventory(); std::string GetName(); int GetHealth(); void Sethealth(int Health); int GetAge(); void IncreamentAge(); THappiness GetHappiness(); void SetHappiness(THappiness happiness); void Load(std::string saveFileName); void Save(std::string saveFileName); };
I'm not going to worry about the other files, and no go into detail about reading and writing to files (nor loops), but your save and load would do something like this (in Pseudo-code):
void TPet::Save(std::string saveFileName) { FileType saveFile = FileOpen(saveFileName); // We know Age Health and happiness will always be the same length, so we can write them in without // having to write in the length of the data WriteFile(saveFile, &Age, sizeof(Age)); WriteFile(saveFile, &Health, sizeof(Health)); WriteFile(saveFile, &Happiness, sizeof(Happiness)); // Store the Name, but give it the name length 1st int length = Name.size(); WriteFile(saveFile, &length, sizeof(length)); // loop through and write each character // Now write the number of inventory items length = Inventory.size(); WriteFile(saveFile, &length, sizeof(length)); // now loop through and store each item id, assuming you can access TItem::GetId() CloseFile(saveFile); } // In load you do the same thing in the same order
I got a related question to this. Can't you just write a whole instance of a object to the binary file, and then load a full object with a load function? Or am I missing something?