mikrocontroller.net

Forum: PC-Programmierung Caster selber definieren


Autor: Patrick O. (sir-patrick)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Gibt es Cast-Operatoren eigentlich nur für Standarddatentypen, oder kann 
man sich seine eigenen Schreiben, ohne dabei auf die gewohnte Syntax zu 
verzichten?

Ich finde interessant wäre es, so etwas über mehrere Programmiersprachen 
zu erfahren.

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um welche Programmiersprache geht es dir?

In C und C++ ist die Syntax fuers Casten immer die gleiche, voellig 
unabhaengig ob man nach int* oder nach Foo* castet (Foo irgendeine 
struct). In C++ gibt es hoechstens noch die Unterschiede 
reinterpret_cast, static_cast, const_cast und dynamic_cast. Die genauen 
Unterschiede findest du im C++-Standard, denn die sind ziemlich 
technisch.

In Java spielt es auch keine Rolle was man castet, das sieht immer nach 
C-Syntax aus.

In hoeheren Sprachen wie Haskell gibt es gar keine Cast-Operatoren mehr.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C++ kann man sich aber tatsächlich selber definieren, was ein Cast 
(bzw. allgemein eine Konvertierung) bei einem selbst definierten Typ für 
ein Ergebnis haben soll. Dazu gibt es die Konvertier-Konstruktoren und 
-Operatoren. Ob das bei Java und anderen Sprachen auch so ist, weiß ich 
nicht. Bei C gibt's das aber nicht.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> (bzw. allgemein eine Konvertierung)

Exakt. Es handelt sich dabei nicht mehr um einen type cast, worauf sich 
der Fragesteller bezog. Konvertierungen gibt es natuerlich in jeder 
Sprache, die Datentypen in irgendeiner Form anbietet. C++ bietet dafuer 
halt ein wenig syntactic sugar, aber prinzipiell sind es auch nur ganz 
normale Funktionen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Es handelt sich dabei nicht mehr um einen type cast, worauf sich
> der Fragesteller bezog. Konvertierungen gibt es natuerlich in jeder
> Sprache, die Datentypen in irgendeiner Form anbietet.

Es geht nicht darum, ob Konvertierungen von der Sprache angeboten 
werden, sondern ob sie es ermöglicht, eigene zu definieren.

> C++ bietet dafuer halt ein wenig syntactic sugar, aber prinzipiell sind
> es auch nur ganz normale Funktionen.

Auch Funktionen sind nur syntactic sugar, wenn man es so betrachtet.

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Auch Funktionen sind nur syntactic sugar, wenn man es so betrachtet.

Dem kann ich nicht zustimmen. Funktionen sind auf keinen Fall trivial 
durch einfachere Konstrukte zu ersetzen, das artet in enorme Details 
aus. Die impliziten Konvertierungsoperatoren dagegen sind ziemlich 
einfach durch explizite Funktionsaufrufe zu ersetzen.

Autor: Ulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C# erlaubt das jetzt auch. Natürlich ist der Cast wieder eine Funktion 
innerhalb der entsprechenden Klasse (TypeA).


    public static implicit operator TypeB(TypeA f)
    {
        ...
    }

Castet den TypeA in TypeB. Der Aufruft würde etwa so aussehen:

TypeA a = ...
TypeB b = (TypeB)a;

TypeA muss also TypeB kennen und wissen, wie es in TypeB konvertiert 
werden kann. TypeB muss von TypeA nichts wissen.

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.