C++ Grundkurs

Klammeroperator

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Verwendung eines Klammeroperators stellt sicher, dass Instanzen einer Klasse identisch zu Objekten aufgerufen werden können.
03:25

Transkript

In dieser Lektion will ich Ihnen den Klammeroperator in C++ genauer vorstellen. Objekte, für die der Klammeroperator überladen ist, verhalten sich unter der Decke wie Funktionen. Was heißt das? Sie haben eine Klasse. Für die haben Sie den Klammeroperator überladen. Dann können Sie Objekte der Klasse wie Funktionen anwenden. Das Besondere daran ist aber, dass diese „Funktionen“, weil sie unter der Decke Objekte sind, einen Zustand besitzen können. Objekte, die den Klammeroperator überladen haben, werden gerne Funktionsobjekte oder Funktoren genannt. Sie sind intern *Lambda*-Funktionen, insbesondere Closure-Objekten, sehr ähnlich. Das werde ich gleich im Beispiel zeigen. Ich würde mehr über Funktionsobjekte erzählen, wenn es im modernen C++ nicht -Funktionen gäbe. Weil Funktionsobjekte sind sehr praktisch in der Algorithmen der Standard Template Library. Aber nun zum Beispiel. Hier habe ich eine Klasse *SumMe*. Was soll sie machen? Ich initialisiere sie mit 0 und immer wenn ein neuer Wert reinkommt, soll der auf die Summe draufaddiert werden und zum Schluss will ich das Ergebnis abfragen. Der Wert der Summation wird in der privaten Variable *sum* gehalten. Jetzt zeige ich Ihnen, wie ich diesen Funktor, Funktor aus dem Grund, weil hier der Klammeroperator überladen ist, wie dieser Funktor angewandt wird. Ich habe hier einen Vektor von *int*s mit den Werten 1 bis 10 und mein Ziel ist es, alle Werte zusammenzuaddieren. Für das gibt es eine praktische Funktion der Standard Template Library. Die heißt *for_each*. Was mache ich? Ich sage, für jedes Element in * intVec.begin 1* bis *intVec.end* bis zum Ende wende *sumMe* an. *sumMe()*. D.h, ich instanziiere hier ein Objekt vom Typ *sumMe* und was passiert ist, dass für jedes Element dieses Vektors, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 der Klammeroperator aufgerufen wird. Sie sehen es also genau. Da passiert es. Da werden die einzelnen Werte auf *sum* draufaddiert. *for_each* hat die Besonderheit, dass es als Ergebnis des Funktionsobjektes, das ich hier vorne reinstecke, wieder zurückgibt hier. Dann kann ich mit *getSum* den Wert abfragen und Sie sehen, *sumMe.getSum()* ergibt 55. Das Gleiche, um die Ähnlichkeit zu zeigen, mache ich mit der *Lambda*-Funktion. Ich lege mir eine Variable an *sum*, initialisiere sie mit 0 und dann sage ich *for_each(intVec.begin(), intVec.end()* wende *+= x* auf *sum* an. *sum* ist hier außen. Habe ich per Referenz reingegeben. In diesem Fall wird immer *x* zu jedem einzelnen Wert von diesem Vektor hinzuaddiert. Zum Schluss kann ich da *sum* eine Variable in der Funktion *main* ist, kann ich *sum* ausgeben. In diesem Fall kommt da auch wiederum 55 raus. Jetzt will ich Ihnen gerne noch die Ähnlichkeit des Funktors und der *Lambda*-Funktion hier zeigen. Die Funktion hier entspricht genau der Funktion hier oben. *int x* geht rein *int x* geht rein, *sum+= x*, *sum+= x* wird ausgeführt. Von daher sehen Sie, die *Lambda*-Funktion ist sozusagen der wesentliche Kern dieses Funktionsobjekts hier oben. In dieser Lektion habe ich Ihnen Funktionsobjekte vorgestellt, die dadurch entstehen, dass Sie für eine Klasse den Klammeroperator hier überladen. Unter der Decke sind Funktionsobjekte *Lambda*-Funktionen sehr ähnlich und sie sind sehr praktisch in den Algorithmen der Standard Template Library.

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!