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.

408 13. Templates<br />

Bedeutung der Deklaration e<strong>in</strong>mal folgendermaßen zu lesen: Es wird hier<br />

e<strong>in</strong>e Funktion f<strong>in</strong>dMax deklariert, die als return-Value e<strong>in</strong>en u<strong>in</strong>t32 liefert<br />

und die als Parameter e<strong>in</strong> Array beliebiger Elemente sowie die Anzahl der<br />

<strong>in</strong> diesem Array enthaltenen Elemente nimmt. Dazu sei noch anzumerken,<br />

dass hier der generische Parameter class ElementType nicht zwangsweise<br />

für “echte” Klassen steht, es s<strong>in</strong>d auch primitive Datentypen, wie z.B. <strong>in</strong>t,<br />

zulässig.<br />

In der Implementation der Funktion <strong>in</strong> den Zeilen 11–20 sieht man, dass<br />

der Parameter elements ganz genau so verwendet wird, als würde es sich<br />

hier um e<strong>in</strong>en konkreten Datentyp handeln. In Zeile 16 erkennt man, dass<br />

vom konkreten Datentyp nur e<strong>in</strong>es verlangt wird: Instanzen dieses Datentyps<br />

müssen mittels des > Operators mite<strong>in</strong>ander vergleichbar se<strong>in</strong>.<br />

Jetzt stellt sich nur noch die Frage, wie man mit e<strong>in</strong>em solchen Template<br />

arbeitet. Irgendwann muss ja wohl aus unserer generischen Deklaration<br />

und Def<strong>in</strong>ition auch e<strong>in</strong>mal e<strong>in</strong>e konkret aufrufbare Funktion werden. Wie<br />

man <strong>in</strong> der Folge erkennen kann, müssen wir uns nicht im Besonderen darum<br />

kümmern, sondern können das e<strong>in</strong>fach dem Compiler überlassen. Wir<br />

tun e<strong>in</strong>fach so, als wäre diese Funktion für e<strong>in</strong>en bestimmten Datentyp existent.<br />

Werfen wir also kurz e<strong>in</strong>en Blick auf unser Testprogramm, das dieses<br />

Verhalten demonstriert (f<strong>in</strong>d_max_test.cpp):<br />

1 // f<strong>in</strong>d max test . cpp − demo , how the template works<br />

2<br />

3 #<strong>in</strong>clude ” f<strong>in</strong>d max template function . h”<br />

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

5<br />

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

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

8<br />

9 <strong>in</strong>t ma<strong>in</strong> ( <strong>in</strong>t argc , char ∗ argv [ ] )<br />

10 {<br />

11 <strong>in</strong>t32 t e s t a r r a y 1 [ ] = { 4 , 1 , 2 , 5 , 3 } ;<br />

12 double t e s t a r r a y 2 [ ] = { 1 7 . 0 , 1 2 . 0 , 1 3 . 4 , − 7 . 5 , 1 1 . 3 } ;<br />

13<br />

14 cout

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!