Hallo kann man ein Objekt im nachhinein casten zb Daten s; const Daten s; geht das oder wie geht das
Hans schrieb: > Hallo > kann man ein Objekt im nachhinein > casten zb kommt drauf an, wohin du es casten willst. Aber was ist denn ein cast eigentlich? Ein cast ist die Aufforderung an den Compiler etwas unter einem anderen Datentyp anzusehen. Von daher macht das casten eines Objektes wenig Sinn. Ein Objekt, das aus einer bestimmten Klasse entstanden ist, wird immer dieses Objekt bleiben und daran kann auch ein cast nichts ändern. Maximal kann man noch ein Objekt einer abgeleiteten Klasse auf ein Objekt der Basisklasse zurückcasten, um die durch die Ableitung entstandenen Mehrdaten loszuwerden. Aber eigentlich will man das praktisch nie. Ganz im Gegenteil: Dieses 'slicing' (so nennt man das), ist ein gefürchtetes Problem. Was gemeinhin gecastet wird, sind Pointer oder Referenzen auf Objekte. Aber nicht das Objekt selber. > > Daten s; > const Daten s; Ein const kannst du immer 'dazucasten', das ändert am Objekt ja nichts. Nur: Was bringt es dir? Du hast ein Objekt, dass du frei ändern darfst und plötzlich möchtest du diese freie Änderbarkeit einfach so aufgeben. Wozu? Erzähl doch mal dein eigentliches Problem. Im Moment denk ich, da hast ein Problem, hast dir eine mögliche Lösung überlegt und hast noch nicht realisiert, dass deine Lösung in Wirklichkeit keine Lösung ist. > > > geht das oder wie geht das
> Hi ich möchte meine Klassen auf const Testen In welchem Zusammenhang? Software Test? Testen ob deine Klasse const correct ist? Oder was? Was ist der Zweck des testens? > da gabs doch mal den Trick > > Daten s; > const Daten &a = s; > > das geht ja auch aber ich wollte halt mal wiesen ob es auch noch anders > geht! Ob was anders geht?
1 | void foo( const Daten & a ) |
2 | {
|
3 | // ruf alle möglichen Memberfunktionen auf
|
4 | }
|
5 | |
6 | int main() |
7 | {
|
8 | Daten b; |
9 | foo( b ); |
10 | }
|
Oder von mir aus
1 | int main() |
2 | {
|
3 | const Daten b; |
4 | |
5 | // ruf alle möglichen Memberfunktionen von b auf und sieh nach obs geht
|
6 | }
|
Aber was soll der Sinn davon sein? Vom const Objekt kannst du genau all die Memberfunktionen aufrufen, die als const markiert sind. Da reicht auch ein Blick ins Headerfile. Und wenn man da nach dem Schema vorgeht: "Grundsätzlich sollte jede Memberfunktion const sein. Wenns bei einer Funktion nicht geht, dann meckert der Compiler sowieso rum, weil man einen Member in einer const Memberfunktion nicht verändern kann" ... dann hat man sowieso alles was als const Memberfunktion möglich ist auch tatsächlich const gemacht.
1 | const Daten &a = a; |
rofl Nimm Dir doch mal ein paar Minuten mehr Zeit und Beschreibe was Du genau willst. Mit diesen kurzen Sätzen kann mann nicht viel anfangen.
Hallo ich wollte doch nur ne alternative wiessen? in Daten d stehen ja noch keine Datensätze die werden ja erst per Hand über die Tastatur eingegeben. wenn das da abgeschlossen ist soll Daten d im programm auf const gesetzt werden und anschließen möchte ich halt dadurch herausfinden ob die Klassen const korrekt ist
1 | Daten s; |
Daten eingabe. Danach kannst Du zur Weiterverarbeitung mit einem cast weitergeben, oder eben auch casten:
1 | meineMachWasMethode ((const Daten)s); |
Hans schrieb: > wenn das da abgeschlossen ist soll Daten d im programm auf const gesetzt > werden und anschließen möchte ich halt dadurch herausfinden ob die > Klassen const korrekt ist const-Korrektheit ist eine statische Eigenschaft einer Klasse. Die prüft man nicht dadurch, indem man Programmcode schreibt. Sondern indem man im Editor das Header File der Klasse durchgeht und sich bei jeder Memberfunktion frägt: Kann ich die Funktion const machen oder nicht? Im Zweifelsfall will man alle Memberfunktionen const machen! Nur bei einigen wird das klarerweise nicht funktionieren :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.