Nowendigkeit und Aufwand? von cast!
-
sagen wir mal ich hätte ein eindeutiges musster von A's und B's in der LIST, dann eine lösung mit cast schon die geeigneste, wenn ich so sicher bin das ich immer weis wann ein A oder ein B kommt.?
-
zwei container mit jeweils A und B typen sind nicht geeignet? container von basisklassen halte ich grundsätzlich nur dann für sinnvoll, wenn der zugriff über das basisinterface an allen stellen ausreicht, sprich keine casts notwendig sind. gibt aber natürlich immer ausnahmen.
-
Habe eine Datenklasse welche die Basis- Klasse enthält, und zwei Managment klassen welche einmal die Klassen bspw. A und B verwenden und von mir aus C und D verwenden welche jeweils von Basis abgeleitet sind...
die Managmentklassen legen ihre Objekt A,B bzw. C,D in unterschiedlich defineriten muster an, aber verwenden trozdem die gleiche datenklasse..
also kommt man schwer drumherm mit mehren container zu arbeiten... quasie eine ausnahme...
-
Und was für eine Beziehung besteht überhaupt zwischen den beteiligten Klassen? (macht es da überhaupt Sinn, sie von einer gemeinsamen Basisklasse abzuleiten?)
-
ja, weil dennoch A,B,C,D variabeln enthalten die von allen adndere verwendet wird.
Zudem wir spätere ein Workflow klasse entwickelt welche dann die unterschiedlich generierten Datenklassen anhand der basisparameter verwendet..
-
Wenn du nur mit den (virtuellen) Methoden der Basisklasse auf die Daten zugreifen kannst/musst, kannst du die Basisklasse verwenden. Wenn du gezwungen bist, die Objekte als A oder B (oder was auch immer) zu verwenden, solltest du sie auch als A speichern, da ist so ein Cast nur fehleranfällig (irgendwann packst du ein Objekt in die list<>, das nicht zu dem vorgegebenen Anordnungsmuster passt - und dann fliegt dir dein PRogramm um die Ohren).
-
du meinst wenn ich die basis variabeln der basisklasse über virtualle methodne zugreifbar mach, ist theoritsch kein cast notwenig, weil dann über polymorphe gearbeiten werden kann...!?
-
Ja, so sieht's aus (wobei dann noch die Frage im Raum steht, ob A und B ähnlich genug sind, um über ein gemeinsames Interface angesprochen werden zu können).
-
BorisDieKlinge schrieb:
Habe eine Datenklasse welche die Basis- Klasse enthält, und zwei Managment klassen welche einmal die Klassen bspw. A und B verwenden und von mir aus C und D verwenden welche jeweils von Basis abgeleitet sind...
die Managmentklassen legen ihre Objekt A,B bzw. C,D in unterschiedlich defineriten muster an, aber verwenden trozdem die gleiche datenklasse.....

Sorry, kannst Du das mal kurz als Source skizzieren ?Gruß,
Simon2.
-
noch mal ne andere Frage:
A o; Basis *x= &o; A *p= static_cast<A*> (&(*x)); //geht A *p= static_cast<A*> &(*x)); //geht nichwieso?
-
Da fehlt 'ne Klammer, darum geht's nicht. (wobei man sich über den Sinn dieser Konstruktion streiten könnte)
-
sorry die rechte klammer müsste man noch weg machen..
nein ich meine das "&" auch eingeklammert werden muss damit es geht!!
-
Ja, bei den C++ Casts muss der gesamte betrachtete Ausdruck in Klammern gesetzt werden.
-
Was in sofern erklärbar ist, das es sich bei dem Cast um eine Funktion handelt...
cu André
-
ahh..... stimmt.. das erklärt alles