Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++ Grundkurs

Default-Template-Argumente

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Default-Argumente erlauben es in C++, Default-Werte für Template-Parameter von Funktions- und Klassen-Templates vorzugeben.
03:45

Transkript

In dieser Lektion will ich Ihnen Default-Argumente für Template-Parameter vorstellen. Sie können für ihre Funktionen zum Klassen-Templates Default-Argumente für Template-Parameter vorgeben. Sobald Sie das tun, müssen alle folgenden Template-Parameter auch Default-Argumente besitzen. Hier habe ich ein kleines Beispiel. Das Funktions-Template ist isSmaller. Das Funktions-Template isSmaller vergleicht zwei Werte und ermittelt welcher Wert von beiden kleiner ist. Jetzt habe ich zusätzlich das Funktions-Template isSmaller über eine sogenannte Vergleichsfunktion parametrisiert. Per default verwende ich die Vergleichsfunktion std::less von der Standard Template Library. Das ist hier auch mein Default-Argument für mein Template-Parameter. Hier instanziiere ich mein Default-Argument zu pred für Prädikat. Im Körper des Funktions-Templates wende ich das Prädikat an. Prädikat heißt die Funktion aus diesem Grund, weil es eine Funktion ist, die nur true oder false zurückgeben kann. Jetzt zeige ich Ihnen das Ganze noch in der Anwendung. Zum Account komme ich später. Zuerst die Funktion, die kenne Sie jetzt. Die dürfte jetzt eigentlich keine große Überraschung mehr werden. Dann wende ich die Funktion an isSmaller von 3, 4. isSmaller von 3,4 ist relativ naheliegend, dass ich hier keine besondere Vergleichsfunktion angeben muss. Weil 3, 4 kann die Vergleichsfunktion konkret hier oben vergleichen. isSmaller von zwei Doubles ist auch kein Problem. Das kann std::less lösen. isSmaller von zwei Strings ist auch eine Standardaufgabe. Muss ich auch kein besonderes Prädikat mitgeben. Das heißt, die Standardvergleichsfunktion std::less passt wieder. Deutlich anspruchsvoller wird es aber hier. isSmaller von Account 100 und Account 200, da kann std::less gar nichts damit anfangen, weil std::less ist ein Funktions-Template aus der Standard Template Library und das weiß einfach nicht, wie es Accounts zu vergleichen hat. Also definiere ich es an diesem Pfeil. Ich sage, ein Account a soll kleiner sein als Account b, wenn der Kontostand vom Account a kleiner wie der Kontostand von Account b ist. Das mache ich genau hier. Ich gebe dieser Funktion isSmaller noch das Vergleichskriterium mit. Wenn Sie sich das ganz genau anschauen, ist das eine Lambda-Funktion. Sie erhält zwei Argumente first und second, eben der erste Account und der zweite Account, in diesem Fall per const-Referenz, um ein bisschen Kopieren zu sparen. Dann vergleiche ich getBalance vom ersten mit getBalance vom zweiten. Jetzt funktioniert isSmaller-Funktions-Template nicht mehr mit dem Standardprädikat std::less, sondern eben mit meinem Prädikat, das durch diese Lambda-Funktion hier repräsentiert ist. Jetzt ein Stück weiter. Hier vergleiche ich zwei Strings std::string von 3.14 und 2.14. Was ich jetzt tatsächlich will, ist nicht, dass die Strings verglichen werden, was natürlich std::less hier oben tun würde, sondern der zugrundeliegende Double-Wert, also die Zahl 3.14, die Zahl 2.14. Also verwende ich hier wieder eine Lambda-Funktion first, second und in der Lambda-Funktion, im Körper der Lambda-Funktion wende ich die Funktion der Standard Template Library an stod. Die nimmt einen String und konvertiert es in ein Double. String to Double. Mache ich für beide und so vergleiche ich nicht den String 3.14, sondern die zugrundliegende Zahl 3.14. Dann gebe ich das Ergebnis aus. Das Ganze zeige ich Ihnen noch in der Anwendung. Das sollte eigentlich keine Überraschung werden. In dieser Lektion habe ich Ihnen Default-Argumente für Template-Parameter vorgestellt. Default-Argumente können Sie sowohl für Funktions- wie auch für Klassen-Templates vorgeben. Sobald Sie ein Default-Argument vorgegeben haben, müssen allen folgenden Template-Parameter auch Default-Argumente besitzen.

C++ Grundkurs

Steigen Sie in die mächtige Programmiersprache C++ ein und lernen Sie dabei alle wichtigen Funktionen mit Anwendungsbeispielen kennen.

8 Std. 14 min (147 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!