30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

338 12. Operator Overload<strong>in</strong>g<br />

49 throw( r a n g e e r r o r ) ;<br />

50<br />

51 virtual MathVector operator + ( const MathVector &vec to add ) const<br />

52 throw( <strong>in</strong>valid argument , b a d a l l o c ) ;<br />

53<br />

54 virtual MathVector &operator + ( ) const<br />

55 throw ( ) ;<br />

56<br />

57 virtual MathVector &operator += (const MathVector &vec to add )<br />

58 throw( <strong>in</strong>valid argument ) ;<br />

59<br />

60 virtual MathVector operator − ( const MathVector & v e c t o s u b t r a c t ) const<br />

61 throw( <strong>in</strong>valid argument , b a d a l l o c ) ;<br />

62<br />

63 virtual MathVector operator − ( ) const<br />

64 throw ( ) ;<br />

65<br />

66 virtual MathVector &operator −= (const MathVector & v e c t o s u b t r a c t )<br />

67 throw( <strong>in</strong>valid argument ) ;<br />

68<br />

69 virtual MathVector operator ∗ ( double num to multiply by ) const<br />

70 throw( b a d a l l o c ) ;<br />

71<br />

72 virtual MathVector &operator ∗= (double num to multiply by )<br />

73 throw ( ) ;<br />

74<br />

75 virtual MathVector &operator = ( const MathVector & v e c t o a s s i g n )<br />

76 throw( <strong>in</strong>valid argument ) ;<br />

77<br />

78 virtual bool operator == (const MathVector &vec to compare with ) const<br />

79 throw ( ) ;<br />

80<br />

81 virtual bool operator ! = ( const MathVector &vec to compare with ) const<br />

82 throw ( ) ;<br />

83 } ;<br />

84<br />

85<br />

86 #endif // math vector v1 h<br />

In den Zeilen 48–82 s<strong>in</strong>d die e<strong>in</strong>zelnen Operatoren deklariert, die von dieser<br />

Version des Vektors unterstützt werden. Wie sich leicht erkennen lässt, funktioniert<br />

die Deklaration von Operatoren genau gleich wie die Deklaration von<br />

Methoden, nur dass statt des Methodennamens das Keyword operator, gefolgt<br />

vom gewünschten Operator geschrieben wird. Natürlich gelten auch für<br />

Operatoren genau dieselben Regeln für Overload<strong>in</strong>g, Overrid<strong>in</strong>g, static und<br />

dynamic B<strong>in</strong>d<strong>in</strong>g, wie wir sie bereits bei Methoden kennen gelernt haben.<br />

Gehen wir die Operatoren also e<strong>in</strong>mal der Reihe nach durch um zu sehen,<br />

wann und wie sie vom Compiler e<strong>in</strong>gesetzt werden:<br />

• In den Zeilen 48–49 ist der Index-Operator deklariert. Dieser nimmt e<strong>in</strong>en<br />

u<strong>in</strong>t32 als Parameter und liefert e<strong>in</strong>e Reference auf e<strong>in</strong>en double. Im Fall,<br />

dass der Index ungültig ist, wird e<strong>in</strong> range_error geworfen. Ich habe mich<br />

hier bewusst für die Verwendung der vordef<strong>in</strong>ierten Exceptions aus der<br />

Standard-Library entschieden, da diese Exceptions allen C ++ Entwicklern<br />

geläufig s<strong>in</strong>d (obwohl ich z.B. den Namen range_error nicht so toll f<strong>in</strong>de).<br />

Wenn der Compiler also irgendwo im Code z.B. das Statement<br />

vector1[5]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!