Was aber ist das besondere an dieser Form der Konstruktoren? Eigentlich sind sie ja nichts anderes als Konstruktoren mit genau einem Parameter, so wie ja auch Standardkonstruktoren nur Konstruktoren mit keinen Parametern sind. Aber auch die Konstruktoren zur Typumwandlung erfüllen eine besondere Funktion: sie können vom Compiler genutzt werden, um implizite Typumwandlungen zu machen.
Diese doch sehr abstrakte Aussage soll an dem Beispiel der komplexen Zahlen verdeutlicht werden. Wir werden im Kapitel über Referenzen eine Methode kennenlernen, mit der dann komplexe Zahlen mit anderen Zahlen multipliziert werden können (dazu sind Kenntnisse über Referenzen nötig, daher müssen wir hier noch darauf verzichten). Andererseits wäre aber ja auch eine Methode sinnvoll, die komplexe Zahlen mit reellen multipliziert. Diese kann man sicherlich auch zusätzlich implementieren, aber wenn man dann auch noch weitere Operationen mit mehreren Typen implementieren will, kann die Anzahl der Methoden schnell wachsen.
Um dies zu vermeiden, gibt es die Möglichkeit zur implizitzen Typumwandlung. Wenn man den vorgestellten Konstruktor implementiert hat, der reelle in komplexe Zahlen umwandelt, dann braucht man die seperate Methode zur Multiplikation mit reellen Zahlen nicht mehr, da dann der Compiler zuerst den Typumwandlungskonstruktor nutzt, um aus der reellen eine komplexe Zahl zu machen, und dann diese für die Multiplikation verwendet. Auf diese Art und Weise kann man mit einer Methode pro Operation auskommen.
Hinzu kommt noch, daß die Typumwandlung zwischen vielen
Basistypen schon vorgegeben ist. So wandelt der Compiler Integertypen
in Fließkommatypen um, so daß mit der Umwandlung von
float
in complex
auch eine (dann
zweistufige) Umwandlung von int
in complex
möglich ist, damit muß auch keine Methode zur
Multiplikation mit ganzen Zahlen zur Verfügung gestellt werden.