#include #include #include "string.h" using namespace std; #define BEGIN_OBJECT_ROW "{" #define END_OBJECT_ROW "}" class Serializable { public: virtual void serialize(const char * fname) { ofstream fout(fname); serializeToFile(fout); } virtual void deserialize(const char * fname) { ifstream fin(fname); if(!fin) { cout<<"error opening file: "<>propName) { if (!strcmp(propName, BEGIN_OBJECT_ROW)) break; } while (fin>>propName) { char propValue[200]; fin>>propValue; if (isEndOfObject(propValue)) { break; } if (!strcmp(propName, "simpleFloatProp")) { float floatPropValue = 0.0f; floatPropValue = (float)atof(propValue); this->simpleFloatProp = floatPropValue; } if (!strcmp(propName, "simpleIntProp")) { int intPropValue = atoi(propValue); this->simpleIntProp = intPropValue; } if (!strcmp(propName, "simpleCharProp")) { this->simpleCharProp = propValue[0]; } } } }; class SampleClass : public Serializable { int sizeArrProp; int * arrProp; float floatProp; char charProp; int intProp; SimpleClass simpleObject; public: SampleClass() { arrProp = NULL; floatProp = 0; charProp = 0; intProp = 0; sizeArrProp = 0; } SampleClass(int * _arrProp, float _floatProp, char _charProp,int size, int _intProp, SimpleClass _simpleObject) { this->floatProp=_floatProp; this->charProp=_charProp; this->intProp = _intProp; this->sizeArrProp=size; arrProp=new int [size]; for (int i=0 ; iarrProp[i]=_arrProp[i]; } this->simpleObject = _simpleObject; } void serializeToFile(ofstream& fout) { fout<>propName) { if (!strcmp(propName, BEGIN_OBJECT_ROW)) break; } while (fin>>propName) { if (!strcmp(propName, "simpleObject")) { this->simpleObject.deserializeFromFile(fin); continue; } char propValue[200]; fin>>propValue; if (isEndOfObject(propValue)) { break; } if (!strcmp(propName, "floatProp")) { float floatPropValue = 0.0f; floatPropValue = (float)atof(propValue); this->floatProp = floatPropValue; } if (!strcmp(propName, "intProp")) { int intPropValue = atoi(propValue); this->intProp = intPropValue; } if (!strcmp(propName, "charProp")) { this->charProp = propValue[0]; } if (!strcmp(propName, "arrProp")) { char *leftBracketPos = strchr(propValue,'('); char *rightBracketPos = strchr(propValue,')'); char lengthString[10]; strncpy_s(lengthString, leftBracketPos+1, rightBracketPos - leftBracketPos); lengthString[rightBracketPos - leftBracketPos - 1] = 0; int len = atoi(lengthString); this->sizeArrProp = len; if (this->arrProp) { delete this->arrProp; } this->arrProp = new int[len]; for (int i = 0; i < len; i++) { int arrayValue; fin>>arrayValue; this->arrProp[i] = arrayValue; } } } } }; int main() { int a[5]={5,1,2,3,6}; SimpleClass simpleObject(7,5.6f,'a'); SampleClass sampleObject(a,5.0f,'x',5,70, simpleObject), sampleObject2; sampleObject.serialize("obj1.txt"); sampleObject2.deserialize("obj1.txt"); sampleObject2.serialize("obj2.txt"); sampleObject2.deserialize("obj2.txt"); sampleObject2.serialize("obj3.txt"); }