Division /
Der Divisions-Operator führt eine Division zweier Elemente aus. Für arithmetische Typen mit Dezimalpunkt entspricht dies der mathematischen Division zweier Zahlen. Bei Integer-Typen entspricht dies der ganzzahligen Division ohne Rest.
|
|
Siehe auch Multiplikations-Operator *, Modulo-Operator %
Details
Der Divisions-Operator erwartet zwei Operanden als rvalues und wird von links nach rechts abgearbeitet. Der Rückgabewert ist ein rvalue, dessen Typ grundsätzlich durch die arithmetische Umwandlung der beiden Operanden festgelegt ist.
Der Operator ist zulässig für arithmetische (Integer- und Fliesskomma-) Typen sowie den bool-Typ. Boolsche Werte werden als Integer-Werte aufgefasst. Die Operanden werden gegebenfalls entsprechend den Regeln der arithmetischen Umwandlung gecastet.
Der Divisions-Operator entspricht bei arithmetischen Typen grundsätzlich der mathematischen Division, wobei man die beiden Operanden auch Dividend und Divisor nennt. Wenn mittels des Divisions-Operators jedoch zwei Integer-Werte verknüpft werden, handelt es sich um die ganzzahlige Division ohne Rest. Dies kann manchmal zu schwer auffindbaren Fehlern führen, wenn Fliesskommazahlen mit Integer-Zahlen vermischt in einer Berechnung auftreten. In diesem Falle hilft oftmals ein explizites Casting.
|
|
Aufgrund der Rangordnung der Operatoren ist es möglich, einen Positiv- oder Negativ-Operator bei den beiden Operanden direkt hinzuschreiben.
|
|
Eine Division durch 0 ist, wie in der Mathematik festgelegt, nicht zulässig. Wenn bereits beim Compilieren eine solche Division erkannt wird, gibt der Compiler eine division by zero-Warnung aus. Tritt während der Laufzeit des Programmes eine solche Division auf, so wird dem Programm normalerweise das Signal 8 (SIGFPE: Floating Point Error) gesendet, was ohne entsprechende Behandlung zum Abbruch des Programmes führt. Bei Fliesskommatypen kann es jedoch sein, dass die Division durch 0 zum Ergebnis Unendlich
führt.
|
|
Bei Fliesskomma-Typen kann auch eine Division durch nicht-Null zum Wert Unendlich
führen. Die Division 0. / 0. ergibt den Wert nan (not a number). Die Division inf / inf ergibt ebenfalls nan, wohingegen jede andere Division durch Unendlich den Wert 0 ergibt. Anmerkung: Die Definition des Makros INFINITY befindet sich in der Datei math.h
|
|
Überladen des Operators
Der Divisions-Operator hat grundsätzlich die semantische Bedeutung einer Division im mathematischem Sinne. Allerdings gibt es Klassen, die eine andere Semantik definieren, beispielsweise die Verwandlung von Strings in Teilstrings welche im ursprünglichen String durch ein bestimmtes ASCII-Zeichen getrennt sind. Auch weitere, ähnliche Anwendungen des Divisions-Operators wären denkbar.
Die Prototypen für das Überladen des Divisions-Operators sind die folgenden (Einschränkungen und Erläuterungen siehe Überladen von Operatoren):
|
|
Im folgenden Beispiel wird eine Klasse präsentiert für einen zweidimensionalen Vektor. Gemäss der Vektoralgebra wird eine Division eines Vektors mit einem Skalar als die komponentenweise Division der Vektorfelder beschrieben.
|
|