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

Funktions-Templates überladen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
C++ ermöglicht es, Funktions-Templates wie gewöhnliche Funktionen zu überladen. Dieses Video zeigt die hierfür notwendige Vorgehensweise.
04:15

Transkript

In dieser Lektion will ich das Überladen von Funktions-Templates vorstellen. Wie normale Funktionen können Sie auch Funktions-Templates überladen. Was ist Überladen von normalen Funktionen? Sie können Funktionen mehrfach für verschiedenen Typen definieren. Ein bisschen andere Regeln gelten bei Funktions-Templates. Erstens Templates unterstützen keine automatische Typkonvertierung. Falls Sie eine freie Funktion haben, die den gleichen Namen besitzt, wie das Funktions-Template und diese freie Funktion eine gute oder bessere Wahl wie das Funktions-Template ist, wird diese freie Funktion vorgezogen. Das zeige ich ihnen gleich im Code. Durch einen Aufruf der Form func <type indem Sie explizit hier ein Template-Argument type angeben, drücken Sie im Compiler explizit aus, Sie wollen diese Funktions-Template verwenden. Wenn Sie hingegen leere Klammern verwenden wie hier, drücken Sie im Compiler aus, Sie wollen ein Funktions-Template verwenden und die freien Funktionen sollen nicht in Betracht gezogen werden. Das zeige ich jetzt in der Anwendung. Hier die Funktion xchg in drei Variationen. Als erstes als freie Funktion. Sie sehen, kein Template, kein Typename. Hier unten die fast identische Funktion als Funktions-Template und noch in der dritten Form noch einmal als Funktions-Template. Diesmal tauscht sie nicht zwei sondern drei Werte aus: x, y, z. Das macht sie, indem sie die Funktionen hier oben verwendet. Die Funktion sollte relativ vertraut sein. Jetzt kann man auch schön sehen, wie ein Funktions-Template entsteht. Das Funktions-Template tut das Gleiche wie die Funktion. Der einzige Unterschied ist, dass der konkrete Typ int hier durch den Typparameter T ersetzt ist. Der zweite Unterschied ist, dass Sie der Funktionssignatur hier oben template voranstellen und schon habe Sie ein Funktions-Template. Sie sehen also, Sie müssen sich Funktions-Templates nur wie verallgemeinerte Funktionen vorstellen, die über den Typ hier parametrisiert sind. Nun gehe ich auf das Beispiel ein. Ich gebe drei natürliche Zahlen vor: intA, intB und intC und gebe zwei doubles vor: a und b. Jetzt zeige ich Ihnen, welche Funktionen zu welchem Funktions-Template aufgerufen wird. Wenn ich xchg(intA, intB) aufrufe, wird die freie Funktion verwendet, weil das die beste Wahl ist. Sie sehen, xchg. Ich mache das ein bisschen kleiner hier. Sie sehen, xchg erhält natürlich Zahlen und das ist der Grund, wieso genau diese freie Funktion hier verwendet wird, weil ich hier einen genauen Match habe von int auf int. Wenn ich es mit double aufrufe, passt diese Funktion, die freie Funktion nicht mehr, also wird der Compiler diese Funktion, dieses Funktions-Template verwenden. Ich kann dem Compiler vorschreiben wie in diesem Fall durch die zwei Klammern, dass er nur Funktions-Templates in Betracht ziehen soll, wenn er seine Wahl macht. Aus diesem Grund verwendet er in diesem Fall das Funktions-Template. Ich kann dem Compiler vorschreiben, dass er das Funktions-Template verwenden soll, indem er es für int instanziiert. Es geht schief, ich schreibe ihm vor, instanziiere es für double, verwende als Argumente aber ints, das wird eine Typkonvertierung beinhalten und das macht der Compiler nicht bei Templates. Zum Schluss verwende ich noch xchg(intA, intB, intC). Wenn Sie sich das anschauen, stellen Sie fest, das sind ints. Das wird hier hinauf gemappt. Jetzt rufe ich wiederum eine Funktion auf. Da das ints sind, verwendet dieses Funktions-Template unter der Decke die freien Funktionen hier oben, da diese freie Funktion die beste Wahl für ints darstellt. Jetzt zeige ich Ihnen noch das Programm, übersetze es und dann kommentiere ich diese fehlerhafte Stelle hier ein. Sie sehen, dass der Compiler den Code verweigert, weil er ints nicht nach double konvertieren will. Genau das sehen Sie. Eine verbotene Ausdrucksweise. Hier steht es relativ schön: cannot convert intA (type ‘int‘) to type ‘double‘. Da sagt er es explizit. Er will nicht int nach double konvertieren. Das ist eine Regel von Funktions-Templates. In dieser Lektion habe ich Ihnen das Überladen von Funktions-Templates vorgestellt. Sie können Funktions-Templates entsprechend normalen freien Funktionen auch überladen. D.h, Sie können mehrere Funktions-Templates definieren, die den gleichen Namen haben, sich aber in ihren Typen unterscheiden.

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!