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.

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

memoryExhaustedHook c a l l e d<br />

could f r e e some memory −> try aga<strong>in</strong><br />

g l o b a l new [ ] c a l l e d with s i z e 400000<br />

g l o b a l new [ ] c a l l e d with s i z e 400000<br />

memoryExhaustedHook c a l l e d<br />

no more memory a v a i l a b l e −> b a d a l l o c<br />

12.4 Abschließendes zu overloadable Operators<br />

Nachdem nun Operator Overload<strong>in</strong>g im Allgeme<strong>in</strong>en und Spezialitäten sowie<br />

Tücken der Typumwandlungs-Operatoren und der Speicherverwaltung mittels<br />

new und delete im Speziellen besprochen wurden, möchte ich an dieser<br />

Stelle noch schnell e<strong>in</strong> paar abschließende Worte zu diesem Thema verlieren.<br />

Vor allem gehört erwähnt, dass nicht wirklich alle Operatoren, die <strong>in</strong> C ++<br />

zur Verfügung stehen (siehe Tafel 3.1), auch wirklich selbst def<strong>in</strong>iert werden<br />

können.<br />

Die wenigen Ausnahmen hierbei bilden der Scope-Operator (::), der<br />

Member-Zugriffsoperator (.) und der Member-Zugriff über das Dereferenzieren<br />

e<strong>in</strong>es Po<strong>in</strong>ters auf e<strong>in</strong>en Member (.*).<br />

Um Missverständnisse zu vermeiden: Den Pfeil-Operator (->) kann man<br />

sehr wohl selbst def<strong>in</strong>ieren. Diese Möglichkeit kann man sehr gut zum<br />

E<strong>in</strong>führen e<strong>in</strong>er automatischen Indirektion auf e<strong>in</strong> anderes Objekt gebrauchen,<br />

wie es für verschiedene Konzepte der Delegation notwendig ist. E<strong>in</strong>e<br />

allzu genaue Abhandlung zu solchen Themen gehört allerd<strong>in</strong>gs <strong>in</strong> die weiterführende<br />

Literatur und würde den Rahmen dieses Buchs sprengen. Da<br />

jedoch e<strong>in</strong> Overload<strong>in</strong>g des -> Operators e<strong>in</strong> Verhalten zeigt, das für Neul<strong>in</strong>ge<br />

nicht auf den ersten Blick e<strong>in</strong>sichtig ist, möchte ich hierzu noch e<strong>in</strong> kurzes<br />

Beispiel besprechen (member_access_overload<strong>in</strong>g_demo.cpp):<br />

1 // member access overload<strong>in</strong>g demo . cpp − short demo f o r<br />

2 // overload<strong>in</strong>g of the −> operator<br />

3<br />

4 #<strong>in</strong>clude <br />

5 #<strong>in</strong>clude ” u s e r t y p e s . h”<br />

6<br />

7 us<strong>in</strong>g std : : cout ;<br />

8 us<strong>in</strong>g std : : endl ;<br />

9<br />

10 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

11 /∗<br />

12 ∗ MyObject<br />

13 ∗<br />

14 ∗ Just a dummy c l a s s<br />

15 ∗<br />

16 ∗/<br />

17<br />

18 class MyObject<br />

19 {<br />

20 protected :<br />

21 u<strong>in</strong>t32 value ;<br />

22 public :<br />

23 MyObject ( u<strong>in</strong>t32 value )

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!