[Index] [Vorherige Seite] [Nächste Seite]

## 3. Aufgabe, Objektorientiertes Programmieren

### b) Templates

Schreibe eine Funktion maxLong. Diese Funktion hat zwei Werte vom Datentyp long als Argument und gibt einen long zurück. Dieser Rückgabewert entspricht dem grösseren der beiden Argumente.
(2 Punkte)
Schreibe nun eine template Funktion max. Diese Funktion soll nun für beliebige Datentypen den grösseren der beiden zurückliefern. (3 Punkte)
Hier noch eine schwierige Zusatzfrage: Was muss der Datentyp, für den du die max-Funktion verwenden willst, für eine Eigenschaft haben?
(1 Punkt)

(Total 6 Punkte)

Hier gilt es sicher wieder den passenden Unterrichtsstoff zu "Templates" aus dem letzten Semester bereit zu halten
Das schreiben der maxLong-Funktion darf kein Problem mehr sein!
Eine Funktion hat immer folgenden Aufbau:
Rückgabetyp Funktionsname([Argumenttyp Argumentname])
{
... Code
return [Rückgabetyp];
}
Die Aufgabe sagt Dir wie der Datentyp des Rückgabewertes heisst und auch wie die Argumente sind.
Die Funktion selber ist recht einfach. Man könnte sie sogar auf einer Zeile schreiben. Es genügt aber die Schreibweise, bei der du mit einem if prüfst, ob arg1 grösser als arg2 ist und je nachdem das eine oder das andere zurückgibst. Der Funktionsrumpf braucht so mit den { und } 8 Zeilen, die ganze Funktion also 10 Zeilen.
Um die template Funktion zu schreiben musst du zuerst die template Zeile hinschreiben und danach musst du in der maxLong Funktion den Datentypen mit dem Template Argument ersetzen.
Nachdem du weisst, wo anstelle des Datentypen das Template-Argument hinkommt, kannst du die Funktion fast abschreiben. Ich habe in der Lösung die Argumente als const-Referenzen hingeschrieben. Das wäre für die Aufgabe nicht nötig, aber in der Praxis besser, da dadurch keine unnötigen Kopien erzeugt werden.
Zur Zusatzfrage: Da zum Vergleich der >-Operator verwendet wird, muss dieser für den im Code verwendeten Datentypen (das Template-Argument) definiert sein. Zum Teil muss man diesen sogar speziell definieren (operator >);