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.

15.2 Unions im OO Kontext 465<br />

an object s t o r e s the o r i g i n a l 17<br />

a f t e r the c a l c u l a t i o n the r e s u l t i s : c a l c u l a t i n g r e s u l t . . .<br />

34 a l l f u r t h e r r e q u e s t s come from the cache :<br />

j u s t tak<strong>in</strong>g cached r e s u l t . . .<br />

34<br />

j u s t tak<strong>in</strong>g cached r e s u l t . . .<br />

34<br />

Diese Art des Cach<strong>in</strong>gs ist <strong>in</strong> vielen verschiedenen Situationen sehr brauchbar,<br />

vor allem auch, wenn es um Netzwerk- und Plattenzugriffe geht. Dort liegt<br />

dann auch e<strong>in</strong>er der Haupte<strong>in</strong>satzbereiche von mutable Member Variablen<br />

<strong>in</strong> der Praxis.<br />

Vorsicht Falle: Man kann gar nicht oft genug davor warnen: Sowohl e<strong>in</strong><br />

const_cast als auch mutable Members s<strong>in</strong>d ausschließlich dann e<strong>in</strong>zusetzen,<br />

wenn auch wirklich die logische Konstanz e<strong>in</strong>es Objekts gewahrt bleibt! Fehler,<br />

die dadurch entstehen, dass sich e<strong>in</strong> Objekt nicht mehr logisch konstant<br />

verhält, s<strong>in</strong>d unglaublich schwer zu lokalisieren und ziehen zumeist lange<br />

Nächte mit hohem Kaffeeverbrauch im Zuge e<strong>in</strong>er verzweifelten Debugg<strong>in</strong>g<br />

Session nach sich.<br />

15.2 Unions im OO Kontext<br />

In Abschnitt 2.4.3 wurden bereits die Grundeigenschaften von Unions und<br />

auch die Gefahren bei ihrer Nutzung erklärt. Da zu diesem Zeitpunkt aber die<br />

OO Konzepte von C ++ noch nicht bekannt waren, musste ich e<strong>in</strong>ige Aspekte<br />

schuldig bleiben, die ich <strong>in</strong> der Folge nachholen werde. Wenden wir uns zu<br />

diesem Zweck also am besten e<strong>in</strong>em e<strong>in</strong>fachen Beispiel zu (union_demo.cpp):<br />

1 // union demo . cpp − demo f o r unions <strong>in</strong> the OO context<br />

2<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 : : c e r r ;<br />

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

10 us<strong>in</strong>g std : : bad cast ;<br />

11<br />

12 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

13 /∗<br />

14 ∗ DummyUnion<br />

15 ∗<br />

16 ∗ j u s t a dummy union f o r demo purposes<br />

17 ∗<br />

18 ∗/<br />

19<br />

20 union DummyUnion<br />

21 {<br />

22 private :<br />

23 DummyUnion( const DummyUnion&) {}<br />

24 const DummyUnion& operator = ( const DummyUnion&) { return (∗ this ) ; }<br />

25 public :

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!