30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

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

216 double ∗ dst = elements ;<br />

217 while ( count−−)<br />

218 ∗ dst++ = ∗s r c++;<br />

219 return (∗ this ) ;<br />

220 }<br />

Nur um e<strong>in</strong> kle<strong>in</strong>es bisschen <strong>in</strong>teressanter s<strong>in</strong>d die beiden Vergleichsoperatoren,<br />

denn dort sche<strong>in</strong>t sich e<strong>in</strong> Widerspruch zur oben erwähnten Grundregel<br />

mit <strong>in</strong>ternen Methoden und public Operatoren und deren Verwendung bzw.<br />

Durchmischung e<strong>in</strong>geschlichen zu haben:<br />

222 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

223 /∗<br />

224 ∗/<br />

225 bool MathVector : : operator == (<br />

226 const MathVector &vec to compare with ) const<br />

227 throw( )<br />

228 {<br />

229 i f ( vec to compare with . num elements ! = num elements )<br />

230 return ( false ) ;<br />

231 u<strong>in</strong>t32 count = num elements ;<br />

232 double ∗ s r c = vec to compare with . elements ;<br />

233 double ∗ dst = elements ;<br />

234 while ( count−−)<br />

235 {<br />

236 i f ( ∗ dst ++ != ∗ s r c++)<br />

237 return ( false ) ;<br />

238 }<br />

239 return ( true ) ;<br />

240 }<br />

241<br />

242 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

243 /∗<br />

244 ∗/<br />

245 bool MathVector : : operator ! = (<br />

246 const MathVector &vec to compare with ) const<br />

247 throw( )<br />

248 {<br />

249 return ( ! ( ∗ this == vec to compare with ) ) ;<br />

250 }<br />

In Zeile 249 wird jetzt plötzlich der == Operator auch <strong>in</strong>tern verwendet, obwohl<br />

ich geme<strong>in</strong>t habe, dass dies verpönt sei. Der Grund dafür ist e<strong>in</strong>fach: In<br />

der Implementation des != Operators wird wirklich absolut nichts gemacht,<br />

als das Ergebnis des == Operators zu negieren. Es f<strong>in</strong>den ke<strong>in</strong>e Überprüfungen<br />

statt und es gibt auch sonst ke<strong>in</strong>en Code <strong>in</strong> dieser Methode. Aus diesem<br />

Grund ist der Regelbruch hier zulässig. Im Normalfall würde man diesen<br />

Operator außerdem aufgrund se<strong>in</strong>er Kürze als <strong>in</strong>l<strong>in</strong>e implementieren.<br />

Um uns nun noch e<strong>in</strong> kurzes Bild von der Verwendung der Operatoren<br />

und den <strong>in</strong>ternen Vorgängen machen zu können, werfen wir e<strong>in</strong>en Blick auf<br />

das folgende Testprogramm (math_vector_v1_test2.cpp):

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!