05. marts 2005 - 18:49Der er
17 kommentarer og 1 løsning
Diamant formet nedarvning
Hej alle
Jeg er ved at lave et client server system. Hvert object kan være på serveren og på klienten men på serveren skal objektet understøtte nogle flere funktioner end på klienten.
Da jeg på server siden gerne vil kunne gøre det der skal gøres fra en "ServerObject" pointer, er "ServerObject" nedarvet fra "Object"
For at server funktionerne ikke kan kalde på klient siden har jeg en abstrakt base klasse, "Object", og en abstrakt child klasse "ServerObject" som nedarver fra "Object". Implementeringerne "ObjSomething" og "SvrObjSomething" nedarver fra hhv "Object" og "ServerObject".
: warning C4250: 'SvrObjSomething' : inherits 'ObjSomething::func1' via dominance
Er der en måde at undgå denne advarsel, dvs. ikke "#pragma warning ( disable : 4250 )" men en måde at tydeliggøre overfor compileren hvad det er jeg vil have den til ?
Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
Har du en god ide til hvordan man kan redesigne klasserne ?
Jeg er bare interesseret i at server funktionaliteten ikke kan kaldes på klient siden, og at jeg kan kalde funktionaliteten i både objetet og serverobjektet fra en ServerObject pointer.
ja, men SvrObjSomething skal tvinges til at implementere et antal funktioner, og jeg vil gerne undgå at der ikke er implmenteret en af funktionerne eller at man f.eks er kommet til at implementere "readDataBase" men serveren vil have "ReadDatabase"
Klient objektet ObjSomething implementere funktionere "toXML" og "fromXML", SvrObjSomething implemntere funktioneren "ReadDatabase" og "WriteDatabase" dvs, at jeg Skal kunne kalde client funktionalitet på server siden.
hvis jeg implmentere på denne måde får jeg at vide at ": error C2039: 'fromXML' : is not a member of 'ServerObject'"
Da jeg gerne vil kunne lave en general funktion til at læse og skrive databasen vil jeg gerne specificere for compileren at pointeren kan tilgå funktionalitet i både klient og server objektet. Såsom:
ServerObject* ptrObj;
// This happens in a lookup function SvrObjSomething* ptrSvrObjSomething = new SvrObjSomething; ptrObj = (ServerObject*) ptrSvrObjSomething;
// Use the object ptrObj ->fromXML(); ptrObj ->writeDatabase();
Ok. Måske skal jeg bare lave en workaround som dette :)
ClientObject* ptrCli; ServerObject* ptrSvr;
// This happens in a lookup function SvrObjSomething* ptrSvrObjSomething = new SvrObjSomething; ptrSvr = (ServerObject*) ptrSvrObjSomething; ptrCli = (ClientObject*) ptrSvrObjSomething;
// Use the object ptrCli -> fromXML(); ptrSvr ->writeDatabase();
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.