testUI.cpp userinfo.h Transport Car Bike CarUI BikeUI int int main () main #include"userinfo.h" classTransport { public: constintyear; conststringmanufacturer; Transport(intyear,stringmanufacturer) :year(year),manufacturer(manufacturer) { } virtualvoidToString()=0; }; classCar:publicTransport { public: constintkilometers; Car(intyear,stringmanufacturer,intkilometers) :Transport(year,manufacturer),kilometers(kilometers) { } voidToString() { cout<<"acarmadein"<<year<<"by"<<manufacturer<<",having"<<kilometers<<"kilometersontheclock."<<endl; } }; classBike:publicTransport { public: constboolelectricLights; Bike(intage,stringmanufacturer,boolelectricLights) :Transport(age,manufacturer),electricLights(electricLights) { } voidToString() { cout<<"abikemadein"<<year<<"by"<<manufacturer; if(electricLights)cout<<"withelectriclightsincluded"; cout<<endl; } }; classCarUI:publicCompoundUserInfo<Car> { private: BindedElement<int>year; BindedElement<int>kilometers; BindedElement<string>manufacturer; public: CarUI() :CompoundUserInfo<Car>("car"), #pragmawarning(push) #pragmawarning(disable:4355) year(this,"year",0), kilometers(this,"kilometers",0), manufacturer(this,"manufacturer","unknown") #pragmawarning(pop) { } private: Car*AssemblyInstance() { //assemblynewinstance returnnewCar(year.value,manufacturer.value,kilometers.value); } boolDisassemblyInstance(Car&instance) { year.value=instance.year; manufacturer.value=instance.manufacturer; kilometers.value=instance.kilometers; returntrue; } }; template<>constTypedUserInfo<Car>&TypedUserInfo<Car>::instance=CarUI(); classBikeUI:publicCompoundUserInfo<Bike> { private: BindedElement<int>year; BindedElement<bool>lights; BindedElement<string>manufacturer; public: BikeUI() :CompoundUserInfo<Bike>("bike"), #pragmawarning(push) #pragmawarning(disable:4355) year(this,"year",0), lights(this,"electriclights",false), manufacturer(this,"manufacturer","unknown") #pragmawarning(pop) { } private: Bike*AssemblyInstance() { //assemblynewinstance returnnewBike(year.value,manufacturer.value,lights.value); } boolDisassemblyInstance(Bike&instance) { year.value=instance.year; manufacturer.value=instance.manufacturer; lights.value=instance.electricLights; returntrue; } }; template<>constTypedUserInfo<Bike>&TypedUserInfo<Bike>::instance=BikeUI(); intmain() { Caraudi(1998,"audi",25000); Carliaz(1992,"liaz",1555000); Bikeauthor(1996,"author",true); RootElementroot("transport.xml"); if(!UserInfo::Disassembly(audi,root,"pepikovo") ||!UserInfo::Disassembly(liaz,root,"jardovo") ||!UserInfo::Disassembly(author,root,"ondrejovo")) { cout<<"therewassomeerror!"<<endl; getchar(); return0; } root.Save(); cout<<"allthetransportmeansweresavedcorrectly"<<endl; getchar(); stringwhichone="pepikovo"; whichone="jardovo"; //whichone="ondrejovo"; root.Load(); Transport*loaded=UserInfo::Assembly<Transport>(root,whichone); if(loaded) loaded->ToString(); else cout<<"therewassomeerrorduringloading!"<<endl; getchar(); return0; }