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