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

Typdefinitionen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
C++ verfügt über verschiedene Typdefinitionen, welche die Angabe von alternativen Namen für Typen ermöglichen.
06:48

Transkript

In dieser Lektion stelle ich Ihnen Typdefinitionen in C++ vor. Typdefinitionen legen alternative Namen für Typen fest. Typdefinitionen gibt es in C++ in zwei Formen. Es gibt sie in der Form eines typedef und in der Form eines using. typedef ist die eher historische Form, using die eher moderne Form. typedef schaut so aus. Als erstes folgt das Schlüsselwort typedef, dann der Typ und dann das Typsynonym, das Sie definieren wollen. Hier ein Beispiel: typedef, das ist der bestehende Typ std::map von int nach std::string und die nenne ich in diesem Fall intStringMap. In der nächsten Zeile sehen Sie, so definiere ich eine Instanz von intStringMap. die zweite Form schaut so aus. Das Schlüsselwort using gefolgt von Typsynonym und dann der Typ, für den Sie das Typsynonym erklären wollen. Konkret schaut es dann so aus. Hier erkläre ich das Typsynonym intStringMap auf den Typ std::map von intstd::string. Wenn Sie genau hinschauen, die Reihenfolge der Argumente ist einfach vertauscht. Ich deute das hier mit der Maus ein bisschen an. using hat aber eine Möglichkeit die typedef nicht hat. Mit using können Sie sogenannte Alias-Templates definieren. Alias-Templates sind Typsynonyme auf teilweise gebundene Templates, teilweise spezialisierte Templates. Dazu aber mehr bei Klasse-Templates. Jetzt kommt ein Beispiel. Hier verwende ich einen Header, den habe ich bis jetzt noch nicht verwendet. Das ist der sogenannte type_traits Header. Der type_traits Header erlaubt Ihnen, Typinformationen zur Kompilierzeit abzufragen. Den type_traits Header benötigen Sie dann, wenn Sie die type_traits Bibliothek verwenden wollen, eine relativ neue Bibliothek in C++ und die ist extrem mächtig. Die will ich gerade hier verwenden, um zu zeigen, dass ich neue Typen definieren kann und dass die Typen identisch zu den alten Typen sind. Hier das Beispiel, hier erklären ich Ihnen typedef auf ein unsigned long, den ich einfach unit32 nenne. unit32 ich initialisiere es mit 2011 und das interessante ist das hier. Ich frage std::is_same. Ich frage den Compiler ab, ob unsigned long den gleichen Typ fährt wie mein Typsynonym unit32. Hier hinten noch gefolgt durch value. Hier sehen Sie, wie die Anwendung ausschaut. std ist im Standard name space is_same ist eine Funktionstemplate, benötigt zwei Argumente in eckigen Klammern. Hinten frage ich für den konkreten Wert mit value. Hier sehen Sie das Ergebnis. Die Werte sind gleich. Das Gleiche mache ich mit using der zweiten Art Typdefinition zu definieren. Hier erkläre ich den Typ unit32_, damit sich die unterscheiden und ich frage die Typen ab und erhalte die Antwort true. true erhalte ich hier im Gegensatz zu 1, weil ich hier das std::boolalpha flag auf den stream schiebe, weil es ansprechender ist, eine 1 für den Wert true und eine 0 für den Wert false zu erhalten. Weiter geht es im Text. Hier erkläre ich Ihnen typedef auf ein std::map. Ich initialisiere es mit zwei Pärchen. Pärchen 1 und one, 2 und two. Dann iteriere ich über die Pärchen. Gebe das erste Element aus. Das ist in diesem Fall der Key. Das ist eine map, also die 1. Das zweite Element, das second oder die 2. Hier sehen Sie die Ausgabe one, two, one, two. Wenn ich das einmal für einen intStringMap mache und einmal für intStringMap_. Hier oben haben wir das Typsynonym typedef, hier unten mit using erklärt. Jetzt kommt ein anspruchsvolleres Beispiel. Jetzt erkläre ich eine Typdefinition für eine Funktion. Erst mal definiere ich eine Funktion und das mache ich auf eine besondere Art und Weise, indem ich mit Lambda-Funktion definieren. Hier habe ich eine Lambda-Funktion. Die Lambda-Funktion wird durch die eckigen Klammern eingeleitet, dann in runden Klammern folgen die Parameter und in geschweiften Klammern der Funktionskörper. Was die Funktion tut. Das ist eine Funktion, die zwei Argumente a und b annimmt und sie addiert. Da ich die Lambda-Funktion aber weiter verwenden will, binde ich sie an ihren Namen und das sehen Sie hier. Ich gebe der Funktion den Namen addLambdaFunction. Jetzt geht es mit der Typdefinition weiter. Als erstes erkläre ich eine Typdefinition auf die Art von Funktionen, die die Lambda-Funktion hier oben darstellt. Mit FuncType erkläre ich eine Typdefinition für eine Funktion, die zwei ints annimmt und ein int zurückgibt. Sie sehen, die zwei ints korrespondieren zu den zwei ints hier oben und das int korrespondiert mit dem return Type int, den die Lambda-Funktion hier oben zurückgibt. Den muss ich der Lambda-Funktion nicht spezifizieren, wenn sie so einfach ist. Dann verwenden meinen neu definierten Funktionspointer FuncType. Mache eine Instanz davon mit func und binde die Lambda-Funktion. Jetzt ist es eine normale Funktion. Das Gleiche mache ich hier nochmal mit using. Ich denke, Sie werden hier schon sehen, dass die Syntax hier schon für mich einfacher zu lesen ist. Ich denke für Sie auch. Hier erkläre ich einen Funktionspointer durch das, dass ich sage, es ist eine Funktion, die zwei ints annimmt und ein int zurückgibt. Hier ist sozusagen der variable Anteil, der Name der Funktion. Die Funktionsdefinition nenne ich FuncType. Hier instanziiere ich einen Pointer von diesem Funktionspointertyp FuncType. Hier binde ich die addLambdaFunction an den Funktionspointer. Jetzt was noch folgt, ist einfach nur die Anwendung. Ich verwende wieder die Funktion std::is_same aus der type_traits Bibliothek. Sie sehen, FuncType hat den gleichen Typ wie FuncType_, da ich hier true rausbekomme. Dann wende ich die drei Funktionen an. Erst addLambdaFunction, da ist die Lambda-Funktion, der ich mit der automatischen Typableitung mit auto einen Namen verpasst habe, eben addLambdaFunction. Die wende ich an, um 2011 zu addieren und da kommt natürlich 2011 raus. Das Gleiche tue ich für func, dass ich aus dem Grund habe, da ich eine Typdefinition für einen Funktionspointer erklärt habe und für func_ da habe ich eine Typdefinition wieder um einen Funktionspointer erklärt, diesmal mit using. In dieser Lektion habe ich Ihnen Typdefinitionen vorgestellt. Insbesondere habe ich Ihnen vorgestellt, dass es zwei Formen in C++ gibt. Die erste mit typedef und die zweite mit using. Die mit using ist meiner Ansicht nach leichter zu lesen und sie bietet einen Vorteil. Man kann mit ihnen Typsynonyme für teilweise gebundenen Templates bilden.

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!