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.

13.4 Ableiten von Class Templates 429<br />

ergibt. Genau so verwenden wir Templates auch, wenn wir von ihnen ableiten.<br />

Versuchen wir uns gleich e<strong>in</strong>mal an unserem Buffer und implementieren<br />

wir e<strong>in</strong>e Variante, die uns auch Auskunft über den <strong>in</strong>neren Zustand desselben<br />

geben kann, also wie viele Elemente im Augenblick zwischengespeichert werden<br />

und wie hoch die Gesamtkapazität ist (buffer_class_template_v3.h).<br />

In dieser Abwandlung wurde aus Gründen der E<strong>in</strong>fachheit auf die erste Variante<br />

des Buffers zurückgegriffen, die nur den Typ und nicht die Anzahl der<br />

Elemente als Parameter nimmt.<br />

66 template class QueryableBuffer :<br />

67 public Buffer<br />

68 {<br />

69 public :<br />

70 QueryableBuffer ( )<br />

71 throw( b a d a l l o c ) : Buffer() {}<br />

72<br />

73 QueryableBuffer ( const QueryableBuffer &s r c )<br />

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

75 Buffer(s r c ) {}<br />

76<br />

77 // a l s o support copy<strong>in</strong>g from a ” normal ” b u f f e r<br />

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

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

80 Buffer(s r c ) {}<br />

81<br />

82 virtual ˜ QueryableBuffer ( )<br />

83 throw( ) { }<br />

84<br />

85 virtual u<strong>in</strong>t32 getNumBufferedElements ( )<br />

86 {<br />

87 return ( num elements ) ;<br />

88 }<br />

89<br />

90 virtual u<strong>in</strong>t32 getOverallCapacity ( )<br />

91 {<br />

92 return ( num elements allocated ) ;<br />

93 }<br />

94 } ;<br />

In den Zeilen 66–67 sieht man, dass das Ableiten e<strong>in</strong>es Class Templates von<br />

e<strong>in</strong>em anderen ke<strong>in</strong>e Hexerei ist: Hier wird e<strong>in</strong>fach von e<strong>in</strong>em Buffer abgeleitet,<br />

der dieselbe konkrete Ausprägung hat, wie unser QueryableBuffer.<br />

In den Initialisierungen, z.B. <strong>in</strong> den Zeilen 70–71, wo der default Konstruktor<br />

der Basis explizit aufgerufen wird, wird ebenfalls diese Ausprägung des<br />

Buffers e<strong>in</strong>gesetzt. Neben dem Copy-Constructor <strong>in</strong> den Zeilen 73–75 wurde<br />

zu Demonstrationszwecken auch noch e<strong>in</strong> anderer Konstruktor <strong>in</strong> den Zeilen<br />

78–80 e<strong>in</strong>geführt, der es zulässt, dass e<strong>in</strong> QueryableBuffer auch mit<br />

e<strong>in</strong>em “normalen” Buffer als Parameter konstruiert werden kann.<br />

Um zu zeigen, dass das ganze Spielchen, das hier implementiert wurde,<br />

auch funktioniert, werfen wir noch e<strong>in</strong>en kurzen Blick auf das dazugehörige<br />

Testprogrämmchen (buffer_class_test_v4.cpp):

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!