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.

420 13. Templates<br />

27 template class Buffer<br />

28 {<br />

29 public :<br />

30 static const u<strong>in</strong>t32 MAX NUM ELEMENTS = 8;<br />

31 private :<br />

32 // f o r b i d assignment by mak<strong>in</strong>g operator p r i v a t e<br />

33 const Buffer& operator = ( const Buffer&)<br />

34 { return (∗ this ) ; }<br />

35 protected :<br />

36 u<strong>in</strong>t32 num elements ;<br />

37 u<strong>in</strong>t32 num elements allocated ;<br />

38 u<strong>in</strong>t32 read <strong>in</strong>dex ;<br />

39 u<strong>in</strong>t32 w r i t e i n d e x ;<br />

40 ContentType ∗ elements ;<br />

41 public :<br />

42 Buffer ( )<br />

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

44<br />

45 Buffer ( const Buffer &s r c )<br />

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

47<br />

48 virtual ˜ Buffer ( )<br />

49 throw ( ) ;<br />

50<br />

51 virtual void put ( ContentType const &element )<br />

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

53<br />

54 virtual ContentType getNext ( )<br />

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

56 } ;<br />

Wie bereits von den Function Templates her gewohnt, beg<strong>in</strong>nt man mit dem<br />

Keyword template, gefolgt von der Liste der generischen Typenparameter<br />

<strong>in</strong> spitzen Klammern (siehe Zeile 27). In unserem Fall geht es hier um den<br />

Typ der e<strong>in</strong>zelnen Elemente, die im Buffer zwischengespeichert werden sollen.<br />

Zeile 30 zeigt gleich sehr deutlich, dass dieses Template wirklich nur zu<br />

Demonstrationszwecken geschrieben wurde und dass es <strong>in</strong> dieser Form nicht<br />

s<strong>in</strong>nvoll <strong>in</strong> Programmen e<strong>in</strong>gesetzt werden kann. Die Anzahl der Elemente,<br />

die im Buffer zwischengelagert werden können, ist nämlich auf großartige<br />

acht beschränkt. Die Zuweisung e<strong>in</strong>es Buffers auf e<strong>in</strong>en anderen wurde <strong>in</strong><br />

den Zeilen 33–34 verh<strong>in</strong>dert, <strong>in</strong>dem der Zuweisungsoperator private gesetzt<br />

wurde. Das zugegebenermaßen schwachs<strong>in</strong>nige Statement <strong>in</strong> Zeile 34 existiert<br />

nur, um der Deklaration Genüge zu tun. Da der Operator sowieso nie<br />

aufgerufen wird, erwächst hierbei ke<strong>in</strong>e Gefahr.<br />

E<strong>in</strong>e Auffälligkeit erkennt man allerd<strong>in</strong>gs <strong>in</strong> den Zeilen 33–34: Sowohl der<br />

return-Type als auch der Parameter s<strong>in</strong>d besondere Buffers, nämlich Buffers<br />

vom selben Typ, wie diese Instanz auch. Die Schreibweise<br />

Classname<br />

ist nämlich genau die Art, wie man e<strong>in</strong>e konkrete Ausprägung e<strong>in</strong>es Class<br />

Templates erzeugt. Dadurch, dass hier <strong>in</strong>nerhalb der spitzen Klammern<br />

selbst wieder der generische Typ ContentType steht, erreicht man, dass<br />

“dieselbe” Ausprägung angenommen wird, wie sie auch der konkreten Aus-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!