Forum: PC-Programmierung Caster selber definieren


von Patrick O. (sir-patrick)


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.

von Christoph _. (chris)


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.

von Rolf Magnus (Gast)


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.

von Chris (Gast)


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.

von Rolf Magnus (Gast)


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.

von Christoph _. (chris)


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.

von Ulli (Gast)


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.

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.