Forum: PC-Programmierung Objekt casten


von Hans (Gast)


Lesenswert?

Hallo
kann man ein Objekt im nachhinein
casten zb

Daten s;
const Daten s;


geht das oder wie geht das

von Karl H. (kbuchegg)


Lesenswert?

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

von Hans (Gast)


Lesenswert?

> 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.

von Rene H. (Gast)


Lesenswert?

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.

von Hans (Gast)


Lesenswert?

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

von Rene H. (Gast)


Lesenswert?

1
 Daten s;

Daten eingabe.

Danach kannst Du zur Weiterverarbeitung mit einem cast weitergeben, oder 
eben auch casten:
1
 meineMachWasMethode ((const Daten)s);

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.