Modernes C++ (C++11)
|
|
|
- Tristan Hausler
- vor 8 Jahren
- Abrufe
Transkript
1 Modernes C++ (C++11) Dr. Klaus Ahrens
2
3 C++ History 3
4 C++ History ~ 1980 Bjarne Stroustrup C with Classes Cfront (C++ --> C) 1983 erstmalige Nennung von C Annotated Reference Manual 1994 erster Entwurf ANSI/ISO Standard 1998 Standard ISO/IEC (C++98) 2003 Standard C++03 (TR1 etc.) 2011 Standard C++11 (zuvor als C++0x als Arbeitstitel) 3
5 A taste of C++11 #include <iostream> #include <string> #include <algorithm> #include <array> #include <future> #include <functional> using std::string; string flip (string s) { reverse (begin(s), end(s)); return s; std::future<string> task(string s) { return async(std::bind(flip, s)); 4
6 A taste of C++11 int main() { std::array<std::future<string>, 3> v = { task(" sleef ++C"), task(" wen a ekil"), task(" \negaugnal") ; for (auto& e : v) std::cout << e.get(); 5
7 A taste of C++11 #include <iostream> #include <string> #include <algorithm> #include <array> #include <future> #include <functional> Typisierte Felder fester Größe Ergebnisse nebenläufiger Aktionen neue Funktionsobjekte using std::string; string flip (string s) { reverse (begin(s), end(s)); return s; universelle Iteratoren std::future<string> task(string s) { return async(std::bind(flip, s)); nebenläufige Aktionen 6
8 A taste of C++11 Typisierte Felder fester Größe int main() { std::array<std::future<string>, 3> v = { task(" sleef ++C"), task(" wen a ekil"), task(" \negaugnal") ; Initialisiererlisten for (auto& e : v) std::cout << e.get(); Range-based for Type deduction 7
9 A taste of C++11 // a variant without function task:... Lambdas == anonyme Funktionsobjekte! int main() { std::array<std::future<string>, 3> v = {!! async([] { return flip( "sleef ++C"); ),!! async([] { return flip( "wen a ekil "); ),!! async([] { return flip( "\negaugnal "); )! ; for (auto& e : v) { std::cout << e.get(); 8
10 test your C++ level reverse(begin(s), end(s)); // oder? std::reverse(begin(s), end(s)); Argument dependent lookup aka ADL aka König lookup: 9
11 good books finales Standarddokument nur gegen Geld (238 CHF! ~ 200 ) frei verfügbar: letzte drafts (~99%) z.b. n3092.pdf bislang nur wenige (gute) Bücher verfügbar u.a. ISBN-13: ISBN-13:
12 Compiler noch keiner mit C++11 kompletter Unterstützung es wird besser: Microsoft VS C++11 (beta) g++ > clang > häufig sind work-arounds möglich fragen Sie auf stackoverflow.com (NACH! der Suche nach einer Antwort) 11
13 C++11 im Detail Abschnitt 1: Kernsprache Abschnitt 2: Bibliothek Abschnitt 3: Parallelität 12
14 1 auto -- deduction of a type from an initializer 13
15 1 auto -- deduction of a type from an initializer auto x = 7; x ist von Typ int wegen des Typs des Literals. auto x = expression; x ist vom Typ des Resultats von expression. 13
16 1 auto -- deduction of a type from an initializer template<class T> void printall(const vector<t>& v) { for (auto p = begin(v); p!=end(v); ++p) cout << *p << "\n"; statt C++98: template<class T> void printall(const vector<t>& v) { for (typename vector<t>::const_iterator p = v.begin(); p!=v.end(); ++p) cout << *p << "\n"; template<class T,class U> void f(const vector<t>& vt, const vector<u>& vu){ //... auto tmp = vt[i]*vu[i]; // whatever T*U yields //... 14
17 decltype -- deduction of a type from an expression decltype(e) Ist der Typ ("declared type") des Namens oder des Ausdrucks E und kann in Deklarationen verwendet werden. Der Ausdruck wird NICHT berechnet! void f(const vector<int>& a, vector<float>& b) { typedef decltype(a[0]*b[0]) Tmp; for (int i=0; i<b.size(); ++i) { Tmp* p = new Tmp(a[i]*b[i]); auto ist oft einfacher. decltype wird gebraucht, wenn man einen Typ für etwas benötigt, das keine Variable ist z. B. ein return Typ. 15
18 decltype -- deduction of a type from an expression decltype unterscheidet Werte und Referenzen: int val = 3; int& ref = val; decltype(val) decltype(ref) decltype(ref+1) decltype((val)) -----> int -----> int& -----> int -----> int& (val) ist ein Ausdruck und hat eine Adresse 16
19 decltype -- deduction of a type from an expression Wie kann man eine generische Funktion add schreiben? template <typename X, typename Y>??? add(x x, Y y) { return x + y; 17
20 decltype -- deduction of a type from an expression Wie kann man eine generische Funktion add schreiben? template <typename X, typename Y> decltype(x+y) add(x x, Y y) { return x + y; geht nicht: x und y nicht bekannt :-( 18
21 decltype -- deduction of a type from an expression Wie kann man eine generische Funktion add schreiben? template <typename X, typename Y> decltype((*(x*)0)+ (*(Y*)0)) add(x x, Y y) { return x + y; OK, aber extrem hässlich :-( 19
22 decltype -- deduction of a type from an expression Lösung: neue Signatur-Syntax template <typename X, typename Y> auto add(x x, Y y) -> decltype(x+y) { return x + y; auto nur als Platzhalter (keine Typ-Deduktion) häufig bei sog. lambda-funktionen anzutreffen (später...) 20
Java vs. C++: Different by Design
Java vs. C++: Different by Design Java starke Anlehnung an C++ Deployment Schema: Interpretation OO ist (nahezu) zwingend primäres Kriterium: Komfort diverse (und zumeist nicht abschaltbare) implizite
Objektorientierte Programmierung mit C++
BTW: C++ Literaturempfehlungen beginners level Kaufen: Bafög-Ausgabe 19,95 Ausleihen: im Handel leider vergriffen " 33 BTW: C++ Literaturempfehlungen expert level 34 BTW: C++ Literaturempfehlungen guru
Polymorphismus 179. Function.h. #include <string>
Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function
Objektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string
Informatik - Übungsstunde
Informatik - Übungsstunde Jonas Lauener ([email protected]) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik
kurze Wiederholung class templates
kurze Wiederholung class templates Ein class template ist ein Template, dass mit einem oder mehreren typename -Parametern implementiert wird. Um solch ein Template zu benutzen, übergibt man dem Template
Klausur: Programmieren II
Klausur: Programmieren II Diplomstudiengang Allgemeine Informatik SS07 Erlaubte Hilfsmittel: dokumentenechter Stift. Lösung ist auf den Klausurbögen anzufertigen. (eventuell Rückseiten nehmen) Bitte legen
Programmierkurs C++ Templates & STL (1/2)
Programmierkurs C++ Templates & STL (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Templates Die wichtigsten objekt-orientierten
Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen
Lambda-Funktionen Lambda-Funktionen sind Funktionen ohne Namen. definieren ihre Funktionalität an Ort und Stelle. können wie Daten kopiert werden. können ihren Aufrufkontext speichern. Lambda-Funktionen
Probeklausur. Musterlösung
Programmierkurs Probeklausur Dr. Steffen Müthing Abgabe 08. Februar 2019 IWR, Universität Heidelberg ipk-exercises:2018-ws-55-gc187ae0 Allgemeine Hinweise: Probeklausur Dieses Übungsblatt wird nicht bewertet.
Objektorientierte Programmierung II
Objektorientierte Programmierung II OOP I Erlaubt Entwicklers, im Problemraum zu denken und zu arbeiten. Das Problem wird in eine Menge von Objekten zerlegt. Objekte wirken aufeinander, um das Problem
C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 };
neu in C++11: range-based for int array[] = { 1, 2, 3, 4, 5 ; for (int x : array) // value x *= 2; C++11 for (int& x : array) // reference x *= 2; Ersetzung durch: { auto && range = range-init; for ( auto
Programmieren in C++ Templates
Programmieren in C++ Templates Inhalt Templates Funktions- und Klassen-Templates Spezialisierung von Templates Generische Klassen Einbinden von Templates Instantiierung (implizit und explizit) Templates
Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
Informatik für Mathematiker und Physiker Woche 7. David Sommer
Informatik für Mathematiker und Physiker Woche 7 David Sommer David Sommer 30. Oktober 2018 1 Heute: 1. Repetition Floats 2. References 3. Vectors 4. Characters David Sommer 30. Oktober 2018 2 Übungen
Praxisorientierte Einführung in C++ Lektion: "Allgemeines"
Praxisorientierte Einführung in C++ Lektion: "Allgemeines" Christof Elbrechter, Florian P. Schmidt Neuroinformatics Group, CITEC April 4, 2011 Christof Elbrechter Praxisorientierte Einführung in C++ April
Funktionen: Rückgabewert
Funktionen: Rückgabewert Jede Funktion in C++ (außer Konstruktoren und Destruktoren siehe später) MUSS einen Rückgabewert-Typ vereinbaren. Gibt sie nichts zurück, muss der Rückgabetyp void sein. Jede return-anweisung
C++11 ist da. Und jetzt?
C++11 ist da. Und jetzt? Embedded Event 2012 Raphael Meyer Was ist C++11? JTC1 SC22 WG21 Was ist C++11? Joint ISO/IEC Technical Committee 1: Information Technology Subcommittee 22: Programming Languages
Das erste C++ Programm
Das erste C++ Programm // Program: power8.c // Raise a number to the eighth power. #include int main() { // input std::cout > a; // computation int
Objektorientierte Programmierung mit C++ Dr. K. Ahrens
1 0. Einführung & Motivation Ansatz: "C++ für Java-Kenner" Konzentration auf semantische Unterschiede 'gleichartiger' Konzepte Erörterung der C++ -spezifischen Konzepte (Overloading, Templates) Anspruch
Lambda-Ausdrücke in Programmiersprachen 76
Lambda-Kalkül 75 Das Lambda-Kalkül geht auf Alonzo Church und Stephen Kleene zurück, die in den 30er-Jahren damit ein formales System für berechenbare Funktionen entwickelten. Zu den wichtigsten Arbeiten
Ein kleiner Blick auf die generische Programmierung
TgZero Technik.Blosbasis.net June 3, 2013 1 Inhaltsverzeichnis 1 Vorwort 3 2 Ein kleines Beispiel 3 3 Templates 3 4 Verschiedene Datentypen 4 5 Variadic Templates 5 6 Unterschied zwischen den Programmiersprachen
Aufgabenblatt 11 Musterlösung
Programmierkurs Aufgabenblatt 11 Dr. Ole Klein, Dr. Steffen Müthing Abgabe 09. Februar 2018 IWR, Universität Heidelberg ipk-exercises:2017-ws-89-g0001213 Hinweise zur Klausur: Aufgabenblatt 11 Die Klausur
Einführung in die STL
1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) [email protected] http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/29 Outline 1 3/29 Inhaltsverzeichnis 1 4/29 Typisierung
Konstruktor & Destruktor
Konstruktor & Destruktor Konstruktor Destruktor Überladen von Methoden optionaler Input & Default-Parameter Schachtelung von Klassen this ClassName(...) ~ClassName() Operator : 230 Konstruktor & Destruktor
Generative Programmierung
Generative Programmierung Andreas Zeller Lehrstuhl für Softwaretechnik Universität des Saarlandes, Saarbrücken 2005-01-12 Grundidee: Parametrisierung Die Abstraktion ist ein Grundprinzip der Softwaretechnik.
Generative Programmierung
1/100 Generative Programmierung Andreas Zeller Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken Grundidee: Parametrisierung 2/100 Die Abstraktion ist ein weiteres Grundprinzip der Softwaretechnik.
C++11. Der Leitfaden für Programmierer zum neuen Standard. Rainer Grimm. An imprint of Pearson
Rainer Grimm C++11 Der Leitfaden für Programmierer zum neuen Standard An imprint of Pearson München Boston San Francisco Harlow, England Don Mills, Ontario Sydney Mexico City Madrid Amsterdam Kapitel 7
OCP Java SE 8. Lambda
OCP Java SE 8 Lambda Lambda-Ausdruck sieht ähnlich wie eine Deklaration einer Methode ohne Name und Ergebnistyp aus (a, b) -> b.compareto(a) Lambda Vor Java 8 Ausführbarer Programmcode ( Verhalten ) nur
Prozesse und Threads. wissen leben WWU Münster
Münster Multi Threading in C++ 1 /19 Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message
Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren
Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit
Probeklausur. Klausurdeckblatt. Name der Prüfung: Objekt-orientierte Programmierung mit C++
Probeklausur Klausurdeckblatt Name der Prüfung: Objekt-orientierte Programmierung mit C++ Datum und Uhrzeit: 23. Februar 2013, 10-12 Uhr Institut: Angewandte Informationsverarbeitung Bearbeitungszeit:
Einführung in C ++ und die Objektorientierte Programierung
1/38 Einführung in C ++ und die Objektorientierte Programierung Florian Adamsky, B. Sc. (PhD cand.) [email protected] http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/38 Outline
Programmieren - C++ Funktions-Templates
Programmieren - C++ Funktions-Templates Reiner Nitsch 8471 [email protected] Was sind Templates? C++ Templates ermöglichen generische Programmierung. Das ist Programmierung unabhängig vom speziellen
5. Abgeleitete Datentypen
5. Abgeleitete Datentypen Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Felder (Arrays)!Zeichenketten (Strings)!Strukturen (Structs) Copyright: M. Gross, ETHZ, 2003 2 Arrays! Ein Array ist
19. STL Container Programmieren / Algorithmen und Datenstrukturen 2
19. STL Container Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Kontrollfragen STL Container: Übersicht
Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte
Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte entstehen durch... globale Objektvereinbarung: T o; blocklokale Objektvereinbarung: {.. T o;.. durch expliziten Aufruf
Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2
Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2 Neben vector ist list die zweite wichtige Containerklasse. Um unsere Kenntnisse von Containerklassen zu erweitern,
C++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
C++11. Objektorientierte Programmierung mit C++ enum classes ("strong enums") sind stark typisiert und scoped :
C - enums mit Problemen: konvertierbar nach int exportieren ihre Aufzählungsbezeichner in den umgebenden Bereich (name clashes) schwach typisiert (z.b. keine forward Deklaration möglich) enum classes ("strong
Scott Meyers, Effektives modernes C++, O Reilly, ISBN D3kjd3Di38lk323nnm
D3kjd3Di38lk323nnm Scott Meyers, Effektives modernes C++, O Reilly, ISBN 9783958750494 KAPITEL 1 Typen ableiten In C++98 gab es genau einen Regelsatz für die Typableitung: den für Funktions-Templates.
15. Zeiger, Algorithmen, Iteratoren und Container II
432 15. Zeiger, Algorithmen, Iteratoren und Container II Iteration mit Zeigern, Felder: Indizes vs. Zeiger, Felder und Funktionen, Zeiger und const, Algorithmen, Container und Traversierung, Vektor-Iteratoren,
