www.mikrocontroller.net

Forum: PC-Programmierung Objekt casten


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
kann man ein Objekt im nachhinein
casten zb

Daten s;
const Daten s;


geht das oder wie geht das

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?
void foo( const Daten & a )
{
  // ruf alle möglichen Memberfunktionen auf
}

int main()
{
  Daten b;
  foo( b );
}

Oder von mir aus
int main()
{
  const Daten b;

  // ruf alle möglichen Memberfunktionen von b auf und sieh nach obs geht
}

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.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 Daten s; 

Daten eingabe.

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.