kurze Wiederholung class templates

Ähnliche Dokumente
Fortgeschrittene C++-Programmierung

Problem: Vererbung erlaubt die Wiederverwendung d von Programmcode, virtuelle Funktionen ermöglichen dabei den Austausch gewisser Funktionalität

Objektorientierte Programmierung mit C++ Vector und List

2.0. Jens Weller Joel de Guzman Hartmut Kaiser

0. Einführung & Motivation

Einführung in die Programmierung Wintersemester 2016/17

Assoziative Container in C++ Christian Poulter

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Objektorientierte Programmierung mit C++ SS 2007

Objektbasierte Entwicklung

Einführung in die STL

Programmierkurs. SoSe Markus Geveler Inst. f. Applied Mathematics, TU Dortmund.

Probeklausur. Klausurdeckblatt. Name der Prüfung: Objekt-orientierte Programmierung mit C++

Scala. Abstrakte Elemente. Jevgeni Zelenkov. HM

1.4. Funktionen. Objektorientierte Programmierung mit C++

Einführung in die Programmierung

12) Generische Datenstrukturen

Einführung in C++ mit Microsoft VS

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

C++ Kurs Teil 3. Standard Template Library (STL) Exceptions Kommunikation mit der shell. Übersicht vector<> algorithm: sort, for_each map<>

Objektorientierte Programmierung

18. Vererbung und Polymorphie

Generische Datenstrukturen

Einführung in den Einsatz von Objekt-Orientierung mit C++ II

Problem: Vererbung erlaubt die Wiederverwendung von Programmcode, virtuelle Funktionen ermöglichen dabei den Austausch gewisser Funktionalität

12) Generische Datenstrukturen

Java Einführung Klassendefinitionen

Zusammenfassung. Mit bjam und ein paar Zeilen in einem Jamroot oder Jamfile lässt sich das Kompilieren und Linken einfach automatisieren

Gebundene Typparameter

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek

C++ Templates. Betriebssystemtechnik. Motivation. Warum Templates? Überblick. Operating System Engineering (OSE)

5. Abgeleitete Datentypen

Unterlagen. CPP-Uebungen-08/

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer

Metaprogrammierung 372

2. Semester, 2. Prüfung, Lösung

Programmier-Befehle - Woche 10

Alltagsnotizen eines Softwareentwicklers

C++ - Variablen: Gültigkeit - Sichtbarkeit

Speicherklassen (1) Lokale Variablen

Einführung in die C-Programmierung

Programmierung in C/C++

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Einführung in die STL anhand eines ausgewählten Beispiels

C++, STL und Qt. C++, STL und Qt. Dipl.Ing. Christoph Stockmayer, Schwaig,

Kapitel 8. Generische Klassen

Programmieren in C/C++ und MATLAB

Deklarationen in C. Prof. Dr. Margarita Esponda

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Templatemetaprogrammierung in C++ FlorianJW

Programmierkurs C/C++

Prof. W. Henrich Seite 1

5.5.8 Öffentliche und private Eigenschaften

Algorithmen zur Datenanalyse in C++

1. Übung zu "Numerik partieller Differentialgleichungen"

Codingstandard. Softwareentwicklung Praktikum Stand:

Java Einführung Abstrakte Klassen und Interfaces

Einführung in die Programmierung mit C++

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

1 Abstrakte Klassen, finale Klassen und Interfaces

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Objektorientierte Programmierung. Kapitel 12: Interfaces

Programmieren - C++ Funktions-Templates

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Innere Klassen in Java

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

C A R L V O N O S S I E T Z K Y. Boost C++ Libraries. Johannes Diemke. Department of Computer Science Learning and Cognitive Systems

Einführung in C ++ und die Objektorientierte Programierung

Aufbau von Klassen. class punkt {...

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Einführung in die Informatik 1

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

Elementare Datentypen in C++

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Einführung in die Java- Programmierung

Objektorientierte Programmierung mit C++ Dr. K. Ahrens

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Informatik I (D-MAVT)

Strukturen & Math. Strukturen und Vektoren. Allokieren eines Vektors. Zugriff auf Strukturen. Freigeben eines Vektors

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Java I Vorlesung Generics und Packages

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Die abgeleiteten Klassen Kreis und Viereck erben die Elemente des Basisklasse und verfügen über zusätzliche Eigenschaften (Seitenlänge,

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

DLLs (dynamic loaded libraries) mit MingW erstellen

virtual Wertpapier& operator=(const Wertpapier&); // VIRTUELLE ZUWEISUNG protected: static enum {wortfeldlaenge = 20}; char* name_z; double kurs; };

Algorithmen zur Datenanalyse in C++

Kommunikation. Björn und Georg

Transkript:

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 die Typen als Argumente. Daraufhin ist das class template für diese Typen instanziiert (und auch compiliert). Nur diejenigen member functions, die auch wirklich benutzt werden, sind zur Laufzeit instanziiert. class templates lassen sich auf bestimmte Typen spezialisieren. Es ist ausserdem möglich Standardwerte für die Template-Parameter zu definieren. Diese können sich auf vorher benutzte Template-Parameter beziehen. Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 1 / 12

Nontype Function Template Parameters Template Parameter müssen nicht zwangsweise Types sein Es sind auch gewöhnliche Werte erlaubt nontype parameter funktionieren auch für funktionale Templates: template <typename T, int VAL> T addvalue (T const& x) { return x + VAL; } Nützlich wenn Funktionen bzw. Operationen als Parameter genutzt werden z.b. mit der Standart Template Library (STL) kann eine Instanz dieser Funktion übergeben werden um einen Wert zu jedem Element einer collection hinzuzufügen: Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 2 / 12

Nontype Function Template Parameters std::transform (source.begin(), source.end(), //start and end of source dest.begin(), //start of destination addvalue<int,5>); //operation bei obenstehender Lösung gibt es ein Problem addvalue (int,5) ist ein Funktionstemplate - kann keine Template Parameter ableiten deshalb müssen wir den genauen Typ des Templates angeben: std::transform (source.begin(), source.end(), //start and end of source dest.begin(), //start of destination (int( )(int const&)) addvalue<int,5>); //operation Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 3 / 12

Restrictions for Nontype Template Parameters nontype template -Parameter haben Einschränkungen: erlaubt: integral values (z.b. enums ), Objektpointer nicht erlaubt: floating-point numbers und class-type -Objekte template <double VAT> double process (double v) { return v VAT; } //ERROR: floating point values are not //allowed as template parameters template <std::string name> //ERROR: class type objects are not class MyClass{ // allowed as template parameters }; Anmerkung: floating-point numbers sind aus Historischen Gründen nicht erlaubt, allerdings ist davon auszugehen, dass dies in zukünftigen C++ Versionen möglich sein wird. Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 4 / 12

Restrictions for Nontype Template Parameters Im Gegensatz zu Objektpointern, haben string literals eine interne Verknüpfung (zwei string literals mit dem gleichem Wert, aber in zwei verschiedenen Modulen sind verschiedene Objekte). Aus diesem Grund kann man string literals auch nicht als Argument für Templates benutzen: template <char const name> class MyClass { }; MyClass< hello > x; //ERROR: string literal hello not allowed Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 5 / 12

Restrictions for Nontype Template Parameters globale Pointer dürfen auch nicht verwendet werden: template <char const name> class MyClass { }; char const s = hello ; MyClass<s> x; //ERROR: s is pointer to object with internal linkage Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 6 / 12

Restrictions for Nontype Template Parameters folgendes funktioniert aber trotzdem: template <char const name> class MyClass { }; extern char const s[] = hello ; MyClass<s> x; //OK Das globale Array s wird mit der Zeichefolge hello initialisiert, deshalb ist s ein Objekt mit externer linkage. Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 7 / 12

Summary Templates können Templateparameter haben, die eher Werte sind als Typen Man kann keine floating-point numbers, class-type objects oder objects with internal linkage als Argumente für nontype template -Parameter übergeben. Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 8 / 12

Tricky Basics typename keyword Memberfunktionen definieren und Klassen als Templates benutzen Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 9 / 12

typename keyword wird in C++ benutzt um einen identifier in einem Template als Typ festzulegen. template <typename T> class MyClass { typename T::SubType ptr; }; das zweite typename definiert SubType als ein Typ, innerhalb von der Klasse T (ohne das typename würde SubType als static member angesehen. Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 10 / 12

typename keyword Eine übliche Anwendung für den typename ist der Zugriff auf Iteratoren auf STL containers in einem Template: #include <iostream> // print elements of an STL container template <typename T> void printcoll (T const& coll) { typename T::const iterator pos; // iterator to iterate over coll typename T::const iterator end(coll.end()); // end position } for (pos=coll.begin(); pos!=end; ++pos) { std::cout << pos << ; } std::cout << std::endl; Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 11 / 12

typename keyword Funktionstemplate mit einem STL contatiner als Aufrufparameter T um diesen abzuzählen, wird ein Zähler ( iterator ) benutzt, der als type const iterator innerhalb jeder STL container -Klasse deklariert wird: class stlcontainer { typedef iterator; //iterator for read/write access typedef const iterator; //iterator for read access }; Um auf den type const iterator (mit dem Template-Typ T) zuzugreifen, muss dieser mit einem typename definiert werden: typename T::const iterator pos; Tim Krämer (Seminar - Inf - MIN - UniHH) C++ Templates SoSe09 12 / 12