Metaprogrammierung in C/C++

Größe: px
Ab Seite anzeigen:

Download "Metaprogrammierung in C/C++"

Transkript

1 Metaprogrammierung in C/C++ Vortrag im WP Deeply Embedded Philipp Bandow Jakob Kasicz Orhan Aykac

2 Inhalt 1 Metaprogrammierung mit dem Präprozessor 2 Templates Einleitung Parameter und Typen Abhängige Namen Benutzung Explizite Spezialisierung Partielle Spezialisierung Beispiele 3 Code Bloat Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 2/83

3 Metaprogrammierung mit dem Präprozessor Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 3/83

4 Metaprogrammierung mit dem Präprozessor Sprachelemente stammen aus C Verwendbar auch in C++ Hauptsächlicher Einsatzzweck: Wiederholung oder Manipulation von bereits vorhandenem Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 4/83

5 Präprozessor Direktiven (C-Makros) Werden mit der #define Direktive erstellt Quellcode wird vom Präprozessor bearbeitet und alle mit #define erstellten Makros werden ersetzt Meistens werden Makros für Konstanten verwendet (eher in C als in C++), sie können aber auch verschachtelt werden Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 5/83

6 Einfache Makros (der Vollständigkeit halber) 1 # define NUM 42 2 # define STRING " ein String \n" cout << STRING << endl ; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 6/83

7 Mehrzeilige Makros Das \-Zeichen erlaubt es Makros, welche normalerweise Einzeiler sind, trotzdem in mehreren Zeilen zu schreiben Man sollte allerdings beachten, dass der Präprozessor die Makros trotzdem als Einzeiler verarbeitet 1 # define STRINGOUT cout << " Stringdingdong " \ 2 endl ; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 7/83

8 Parametersubstitution Makros dürfen ähnlich wie Funktionen parametriert werden Man kann an dem Beispiel erkennen das es KEINE Typüberprüfung gibt Es darf fast jedes Wort als Parameter übergeben werden, es dürfen allerdings keine, vorkommen, da diese die Parameter trennen! Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 8/83

9 Parametersubstitution Makros dürfen ähnlich wie Funktionen parametriert werden Man kann an dem Beispiel erkennen das es KEINE Typüberprüfung gibt Es darf fast jedes Wort als Parameter übergeben werden, es dürfen allerdings keine, vorkommen, da diese die Parameter trennen! Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 8/83

10 Parametersubstitution Makros dürfen ähnlich wie Funktionen parametriert werden Man kann an dem Beispiel erkennen das es KEINE Typüberprüfung gibt Es darf fast jedes Wort als Parameter übergeben werden, es dürfen allerdings keine, vorkommen, da diese die Parameter trennen! Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 8/83

11 Klammern von Parametern Wie erwähnt ist eine Markodefinition eine reine Substitution, von daher ist gerade bei mathematischen Ausdrücken Vorsicht geboten und es ist gängige Praxis viel zu Klammern 1 # define SQRE1 (x) ((x) * (x)) 2 # define SQRE2 (x) (x * x) 1 int a= SQRE1 (5+1) ; // a= ((5+1) *(5+1) )= 36 2 int b= SQRE2 (5+1) ; // b= (5+1*5+1) = 11 Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 9/83

12 Klammern von Parametern Wie erwähnt ist eine Markodefinition eine reine Substitution, von daher ist gerade bei mathematischen Ausdrücken Vorsicht geboten und es ist gängige Praxis viel zu Klammern 1 # define SQRE1 (x) ((x) * (x)) 2 # define SQRE2 (x) (x * x) 1 int a= SQRE1 (5+1) ; // a= ((5+1) *(5+1) )= 36 2 int b= SQRE2 (5+1) ; // b= (5+1*5+1) = 11 Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 9/83

13 Klammern von Parametern Wie erwähnt ist eine Markodefinition eine reine Substitution, von daher ist gerade bei mathematischen Ausdrücken Vorsicht geboten und es ist gängige Praxis viel zu Klammern 1 # define SQRE1 (x) ((x) * (x)) 2 # define SQRE2 (x) (x * x) 1 int a= SQRE1 (5+1) ; // a= ((5+1) *(5+1) )= 36 2 int b= SQRE2 (5+1) ; // b= (5+1*5+1) = 11 Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 9/83

14 Variadic Makros Variadic Makros sind Makros mit einer Parameterliste, diese ist Variabel und wird mit (...) angegeben. Die Übergabe findet mit dem vordefinierten VA ARGS Makro statt 1 # define ERROR (...) \ 2 printf (" file : %s, line : %d, error : ", ) \ 3 FILE, LINE, VA_ARGS ) 1 int main ( void ) { 2 ERROR (" Dies ist Fehler Nr %d", 100) ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 10/83

15 Variadic Makros Variadic Makros sind Makros mit einer Parameterliste, diese ist Variabel und wird mit (...) angegeben. Die Übergabe findet mit dem vordefinierten VA ARGS Makro statt 1 # define ERROR (...) \ 2 printf (" file : %s, line : %d, error : ", ) \ 3 FILE, LINE, VA_ARGS ) 1 int main ( void ) { 2 ERROR (" Dies ist Fehler Nr %d", 100) ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 10/83

16 Variadic Makros Variadic Makros sind Makros mit einer Parameterliste, diese ist Variabel und wird mit (...) angegeben. Die Übergabe findet mit dem vordefinierten VA ARGS Makro statt 1 # define ERROR (...) \ 2 printf (" file : %s, line : %d, error : ", ) \ 3 FILE, LINE, VA_ARGS ) 1 int main ( void ) { 2 ERROR (" Dies ist Fehler Nr %d", 100) ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 10/83

17 Der #-Operatror Wandelt einen Makroparameter in einen String um Darf nur innerhalb eines Makros verwendet werden Es ist jedoch nicht möglich den #-Operator auf einen Token anzuwenden 1 # define TOSTRING (a) #a 2 # define SOGEHTESNICHT # fehler cout << TOSTRING ( test string ) << endl // korrekt 5 cout << SOGEHTESNICHT << endl // fehler Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 11/83

18 Der ##-Operator Operator zu Konkatenation von 2 Token Darf ebenso nur in Makros verwendet werden Macht die Horizontale Iteration möglich. (zur Horizontalen Iteration später mehr) Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 12/83

19 Der ##-Operator Operator zu Konkatenation von 2 Token Darf ebenso nur in Makros verwendet werden Macht die Horizontale Iteration möglich. (zur Horizontalen Iteration später mehr) Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 12/83

20 Der ##-Operator Operator zu Konkatenation von 2 Token Darf ebenso nur in Makros verwendet werden Macht die Horizontale Iteration möglich. (zur Horizontalen Iteration später mehr) Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 12/83

21 Verschachtelte Makros Makros lassen sich beliebig verschachteln Es muss darauf geachtet werden, dass nur von oben nach unten verschachtelt werden kann Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 13/83

22 Verschachtelte Makros Makros lassen sich beliebig verschachteln Es muss darauf geachtet werden, dass nur von oben nach unten verschachtelt werden kann Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 13/83

23 Baumstruktur des Makros Baumstruktur Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 14/83

24 Primitive horizontale Iteration Dient dazu bestimmten Code zu expandieren Ist ein recht unflexiebles, dafür simples Konzept Die gesamte Expansion geschieht einzeilig, daher der der Begriff Horizontale Expansion Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 15/83

25 Primitive horizontale Iteration Dient dazu bestimmten Code zu expandieren Ist ein recht unflexiebles, dafür simples Konzept Die gesamte Expansion geschieht einzeilig, daher der der Begriff Horizontale Expansion Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 15/83

26 Primitive horizontale Iteration Dient dazu bestimmten Code zu expandieren Ist ein recht unflexiebles, dafür simples Konzept Die gesamte Expansion geschieht einzeilig, daher der der Begriff Horizontale Expansion Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 15/83

27 Horizontale Iteration Bringt die einfache horizontale Iteration auf ein höheres Level der Allgemeingültigkeit Die Idee ist ein Makro an einen allgemeinen Iterationsprozess zu bergeben Strebt nach dem Konzept der Wiederverwendbarkeit von Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 16/83

28 Horizontale Iteration Bringt die einfache horizontale Iteration auf ein höheres Level der Allgemeingültigkeit Die Idee ist ein Makro an einen allgemeinen Iterationsprozess zu bergeben Strebt nach dem Konzept der Wiederverwendbarkeit von Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 16/83

29 Horizontale Iteration Bringt die einfache horizontale Iteration auf ein höheres Level der Allgemeingültigkeit Die Idee ist ein Makro an einen allgemeinen Iterationsprozess zu bergeben Strebt nach dem Konzept der Wiederverwendbarkeit von Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 16/83

30 Lokale Iteration Ist ein Konzept um die enzeilige Expansion der vorherigen Kozepte zu umgehen Das Prinzip beruht auf der Auslagerung der Iterationsschritte, welche mit #if #endif definiert sind und auf unterschiedlichen Zeilen liegen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 17/83

31 Lokale Iteration Ist ein Konzept um die enzeilige Expansion der vorherigen Kozepte zu umgehen Das Prinzip beruht auf der Auslagerung der Iterationsschritte, welche mit #if #endif definiert sind und auf unterschiedlichen Zeilen liegen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 17/83

32 Datei Iteration & Selbst Iteration Die Datei Iteration unterscheidet sich zur lokalen Iteration ansich nur dadurch, dass kein Makro expandiert wird, sondern in jedem Iterationsschritt eine Datei inkludiert wird Die Selbst Iteration lässt sich als Variante der Datei Iteration verstehen. Dabei befindet sich der Code nicht in einer zusätzlichen Datei, sondern innerhalb der Datei, in der die Iteration initialisiert wird. Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 18/83

33 Datei Iteration & Selbst Iteration Die Datei Iteration unterscheidet sich zur lokalen Iteration ansich nur dadurch, dass kein Makro expandiert wird, sondern in jedem Iterationsschritt eine Datei inkludiert wird Die Selbst Iteration lässt sich als Variante der Datei Iteration verstehen. Dabei befindet sich der Code nicht in einer zusätzlichen Datei, sondern innerhalb der Datei, in der die Iteration initialisiert wird. Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 18/83

34 Inhalt 1 Metaprogrammierung mit dem Präprozessor 2 Templates Einleitung Parameter und Typen Abhängige Namen Benutzung Explizite Spezialisierung Partielle Spezialisierung Beispiele 3 Code Bloat Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 19/83

35 Template Einleitung Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 20/83

36 Ein Template ist eine Mustervorlage Semantisch gleichartige Funktionen/Klassen mit Verschiedenen Parametertypen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 21/83

37 Beispiel: Funktion, die einen int Parameter ausgibt 1 void printdata ( int value ) { 2 std :: cout << " The value is: " << value << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 22/83

38 Beispiel: Funktion, die einen double Parameter ausgibt 1 void printdata ( double value ) { 2 std :: cout << " The value is: " << value << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 23/83

39 Lösung: Template 1 template < typename T > 2 void printdata ( T value ) { 3 std :: cout << " The value is: " << value << std :: endl ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 24/83

40 Beispiel 1 int i = 3; 2 double d = 4. 75; 3 std :: string s(" Hallo "); 4 bool b = false ; 5 printdata (i); // The value is: 3 6 printdata (d); // The value is: printdata ( s); // The value is: Hallo 8 printdata ( b); // The value is: false Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 25/83

41 Parameter und Typen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 26/83

42 Definition Beginnt mit dem Schlüsselwort template, hiernach folgt eine Liste von Template Parametern Darauf folgt eine Funktions- oder Klassen-Definition Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 27/83

43 Parameter Typen Werte Template 1 template < typename T > 2 function (...) {...} Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 28/83

44 Template Type Parameter Templates, die sich auf einen Type beziehen 1 template < typename T1 > 2 class MyClass {...}; 1 template < class T1 > 2 class MyClass {...}; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 29/83

45 Template Type Parameter 1 template < typename T > 2 void func ( T value ) { 3 const T& ref = value ; 4 T* p = new T; 5 T temp (23) ; 6 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 30/83

46 Generierter Code für func<int>: 1 void func ( int value ) { 2 const int & ref = value ; 3 int * p = new int ; 4 int temp (23) ; 5 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 31/83

47 Template Non-Type Parameter Parameter sind compile-time constants Syntax ähnlich einer Variablen-Deklaration Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 32/83

48 Template Non-Type Parameter 1 template < int i> 2 class A {...}; 1 template < double * dp > 2 class B {...}; 1 template < void (* func )( int )> 2 void c() {...} Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 33/83

49 Template Non-Type Parameter 1 A <3 > a3; 1 A< sizeof ( std :: string )> as; 1 double d; 2 B <&d> bpd ; 3 B<NULL > bn; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 34/83

50 Template Non-Type Parameter 1 void myfunc ( int i); 2 struct MyClass { 3 static void staticfunc ( int i); 4 }; 1 int main ( void ) { 2 c <& myfunc >() ; 3 c <& MyClass :: staticfunc >() ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 35/83

51 Template Template Parameter Ermöglicht einem Template ein anderes Template als Parameter hinzuzufügen Eine Klasse, die mehrere collections enthält, bietet dem Nutzer die Möglichkeit, den Type der collection zu bestimmen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 36/83

52 Template Template Parameter 1 template < template < typename T > class ContainerType > 2 class MyClass { 3 ContainerType < int > intcontainer ; 4 ContainerType < std :: string > stringcontainer ; }; 1 MyClass < vector > v; 2 MyClass <list > l; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 37/83

53 Default Template Parameter Genau wie Funktionen können auch Template default Parameter haben Wenn ein Template einen default Parameter hat, müssen alle nachfolgenden Parameter auch default Werte haben Bei der Referenzierung können die Parameter weggelassen werden Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 38/83

54 Default Template Parameter 1 template < typename T1, typename T2 = int, int i = 23 > 2 class MyClass {}; 1 MyClass < double, std :: string, 46 > mc1 ; // Alle Parameter spezifiziert 2 MyClass < std :: string, double > mc2 ; // i weggelasssen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 39/83

55 Default Template Parameter 1 template < typename T1, typename T2 = int, int i = 23 > 2 class MyClass {}; 1 MyClass < std :: string, double, 23 > mc3 ; // Normal 2 MyClass < int > mc4 ; // alle default 3 MyClass < int, int, 0 > mc5 ; // T2 muss spezifiert werden, wenn wir i spezifieren Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 40/83

56 Abhängige Namen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 41/83

57 Abhängig Namen sind jegliche Namen in der Template Definition, die von einem Template Parameter abhängen Werden nur bei der Initialisierung aufgelöst Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 42/83

58 1 struct X { 2 int x; 3 typedef double Z; 4 }; 5 struct Y { 6 typedef int x; 7 double Z; 8 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 43/83

59 1 template < typename T > 2 struct ZZ { 3 T::Z z1; // Falsch 4 typename T::Z z2; // OK 5 6 void func (T& t) { 7 t. x = 4; // OK, referenziert ein Objekt 8 } 9 10 typedef typename std :: vector <T >:: iterator VecIt ; // OK 11 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 44/83

60 1 int main () { 2 X x; 3 Y y; 4 5 ZZ <X> zzx ; // OK, X::Z ist ein Typ 6 ZZ <Y > zzy ; // Falsch, Y:: Z ist ein Objekt 7 8 zzx. func (x); // OK, X::x ist ein Objekt 9 zzy. func (y); // Falsch, Y::x ist ein Typ 10 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 45/83

61 Benutzung von Templates Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 46/83

62 1 template < typename T, unsigned i > 2 struct FixedArray { 3 T data [i]; 4 }; 1 FixedArray < int, 3 > a; // Array vom Typ int mit 3 Elementen 2 FixedArray < int, 1+6/3 > // Array vom Typ int mit 3 Elementen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 47/83

63 1 template < typename T, unsigned i > 2 struct FixedArray { 3 T data [i]; 4 }; 1 FixedArray < int, 3 > a; // Array vom Typ int mit 3 Elementen 2 FixedArray < int, 1+6/3 > // Array vom Typ int mit 3 Elementen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 47/83

64 1 template < template < typename T, typename Allocator > class Container > 2 struct ContainerPair { 3 Container <int, std :: allocator <int > > intcontainer ; 4 Container < std :: string, std :: allocator < std :: string > > stringcontainer ; 5 }; 1 ContainerPair < std :: deque > deqcont ; // zwei std :: deques 2 ContainerPair < std :: vector > veccont ; // zwei std :: vectors Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 48/83

65 1 template < template < typename T, typename Allocator > class Container > 2 struct ContainerPair { 3 Container <int, std :: allocator <int > > intcontainer ; 4 Container < std :: string, std :: allocator < std :: string > > stringcontainer ; 5 }; 1 ContainerPair < std :: deque > deqcont ; // zwei std :: deques 2 ContainerPair < std :: vector > veccont ; // zwei std :: vectors Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 48/83

66 Spezifikation der Template Parameter 1 template < typename T > 2 void func () {...} 1 int main ( void ) { 2 func <int >() ; 3 func < double >() ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 49/83

67 Spezifikation der Template Parameter 1 template < typename T > 2 void func () {...} 1 int main ( void ) { 2 func <int >() ; 3 func < double >() ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 49/83

68 Automatische Template Argument Erkennung 1 template < typename T > 2 void func (T val ) {} 3 4 template < typename T, typename U > 5 void func2 ( U val ) { 6 return T( val ); 7 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 50/83

69 Automatische Template Argument Erkennung 1 int main ( void ) { 2 // T= int 3 func (3) ; 4 // T= double 5 func (3.5) 6 7 // T=int, U= double 8 func2 <int >(3.5) ; 9 // T= std :: vector < std :: string >, U= int 10 func2 < std :: vector < std :: string > >(5); 11 // T und U spezifiziert ; T = std :: vector < std :: string >, U= int 12 func2 < std ::: vector < std :: string >, int >(5.7) ; 13 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 51/83

70 Explizite Spezialisierung Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 52/83

71 Templates können nicht einfach überladen werden Problematisch bei allgemein gehaltenen Templates 1 template < typename T > 2 void func ( T value ) { 3 value. add (3) ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 53/83

72 1 class T1 { 2 public : 3 void add ( int i, double d = 0. 0) ; 4 } 5 class T2 { 6 public : 7 std :: string add ( double d); 8 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 54/83

73 1 class T3 { 2 public : 3 void Add ( int i); 4 } Template func nicht nutzbar für T3 Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 55/83

74 Lösung: Explizite Spezialisierung für T3 1 template <> 2 void func <T3 >( T3 value ) { 3 value. Add (3) ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 56/83

75 Unterschiede zur normalen Template Deklaration leere Template Parameter Liste spezialisierte Template Parameter Liste nach dem Funktionsnamen Compiler Template ist spezialisiert Welche Parameter zu der Spezialisierung gehören Kann für Klasssen- und Funktionstemplates verwendet werden Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 57/83

76 1 template < typename T > 2 class X { 3 X(T x); 4 }; template < > 7 classx < std :: string > { 8 X( const std :: string & s); 9 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 58/83

77 Rekursive Klassen Templates 1 template < unsigned i > 2 struct Fibonacci { 3 static const unsigned result = Fibonacci <i -1 >:: result + Fibonacci <i -2 >:: result ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 59/83

78 Rekursive Klassen Templates 1 template < > 2 struct Fibonacci <0 > { 3 static const unsigned result = 1; 4 }; 5 template < > 6 struct Fibonacci <1 > { 7 static const unsigned result = 1; 8 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 60/83

79 Rekursive Klassen Templates 1 int main ( void ) { 2 std :: cout << Fibonacci <5 >:: result << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 61/83

80 Partielle Spezialisierung Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 62/83

81 Erlaubt es, ein Template für einen Teil der Parameter zu spezialisieren 1 template < typename T, typename U > 2 struct SameType { 3 static const bool result = false ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 63/83

82 1 template < typename T, typename U > 2 struct SameType { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct SameType <T, T > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 64/83

83 1 template < typename T, typename U > 2 struct SameType { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct SameType <T, T > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 64/83

84 1 int main ( void ) { 2 std :: cout << "Is int of the same type as double?" << () SameType <int, double >:: result? " Yes " : "No") << std :: endl ; 3 std :: cout << "Is double of the same type as double?" << () SameType < double, double >:: result? " Yes " : "No") << std :: endl ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 65/83

85 1 template < typename T > 2 struct IsConst { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct IsConst < const T > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 66/83

86 1 template < typename T > 2 struct IsConst { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct IsConst < const T > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 66/83

87 1 template < typename T > 2 struct IsVector { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct IsVector < std :: vector <T > > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 67/83

88 1 template < typename T > 2 struct IsVector { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct IsVector < std :: vector <T > > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 67/83

89 Funktions Template Überladung Es ist nicht möglich, Funktions Templates partiell zu spezialisieren Man kann aber Funktions Templates überladen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 68/83

90 Funktions Template Überladung 1 template < typename T > 2 void swap (T& lhs, T& rhs ) { 3 T temp ( lhs ); 4 lhs = rhs ; 5 rhs = temp ; 6 } Performance Nachteil bei großen Objekten Es wird ein neues Objekt erstellt und 3x kopiert Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 69/83

91 Funktions Template Überladung 1 template < typename T > 2 void swap (T& lhs, T& rhs ) { 3 T temp ( lhs ); 4 lhs = rhs ; 5 rhs = temp ; 6 } Performance Nachteil bei großen Objekten Es wird ein neues Objekt erstellt und 3x kopiert Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 69/83

92 Funktions Template Überladung 1 class ExpensiveToCopy { 2 public : 3 void swap ( ExpensiveToCopy & other ); 4 }; 1 template < > 2 void swap < ExpensiveToCopy >( ExpensiveToCopy & lhs, ExpensiveToCopy & rhs ) { 3 lhs. swap ( rhs ); 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 70/83

93 Funktions Template Überladung 1 class ExpensiveToCopy { 2 public : 3 void swap ( ExpensiveToCopy & other ); 4 }; 1 template < > 2 void swap < ExpensiveToCopy >( ExpensiveToCopy & lhs, ExpensiveToCopy & rhs ) { 3 lhs. swap ( rhs ); 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 70/83

94 Beispiele Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 71/83

95 1 int factorial ( int n) { 2 return ( n ==0)? 1 : n * factorial ( n -1) ; 3 } 1 int main () { 2 std :: cout << factorial ( 15) << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 72/83

96 1 int factorial ( int n) { 2 return ( n ==0)? 1 : n * factorial ( n -1) ; 3 } 1 int main () { 2 std :: cout << factorial ( 15) << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 72/83

97 1 template < int N> 2 struct Factorial { 3 enum { value = N * Factorial <N -1 >:: value }; 4 }; 5 template < > 6 Factorial <1 > { 7 enum { value = 1 }; 8 }; 1 int main () { 2 std :: cout << Factorial <15 >:: value << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 73/83

98 1 template < int N> 2 struct Factorial { 3 enum { value = N * Factorial <N -1 >:: value }; 4 }; 5 template < > 6 Factorial <1 > { 7 enum { value = 1 }; 8 }; 1 int main () { 2 std :: cout << Factorial <15 >:: value << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 73/83

99 Inhalt 1 Metaprogrammierung mit dem Präprozessor 2 Templates Einleitung Parameter und Typen Abhängige Namen Benutzung Explizite Spezialisierung Partielle Spezialisierung Beispiele 3 Code Bloat Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 74/83

100 In C++ wird das dynamic dispatching für Template Funktionen nicht direkt unterstützt Generische Algorithmen müssen zur Compile-Zeit für jeden Typ das Template instanziieren Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 75/83

101 Das führt zu sogenanntem code bloat bzw. template bloat code bloat ist bei dem Design von generischen Bibliotheken ein großes Thema Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 76/83

102 Ein Verfahren, dass versucht, code bloat bei Templates in den Griff zu bekommen ist template hoisting Beim template hoisting wird ein Template in eine generische Basis Klasse und nicht generische Kind Klassen aufgeteilt Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 77/83

103 Ein weiteres Verfahren ist, für verschiedene Algorithmen Typen zu vereinheitlichen type reduction Die Vereinheitlichung gilt dann NUR für diesen Algorithmus Beispiel: Ein RGB-Bild soll in ein BGR-Bild kopiert werden Das BGR Bild wird durch um-mapping der Farbkanäle in ein Pseudo-RGB Bild konvertiert Somit muss nur noch die Kopierfunktion für RGB RGB geschrieben werden Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 78/83

104 Bei solchen Techniken ist Vorsicht geboten, da sie häufig aus unsicheren casts aufbauen Zu Beachten ist, dass unterschiedliche Algorithmen unterschiedliche Vereinheitlichungen erlauben Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 79/83

105 Durch dieses Verfahren wird der Laufzeit-Nachteil in einen Compile-Zeit Nachteil umfunktioniert Der Code wird kleiner, die Compile-Zeit größer Generell entstehen bei exzessiver Template Programmierung oftmals viele Instanz mit ähnlichem bis fast vollständig identischem Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 80/83

106 Quellen C++ Metaprogrammierung - Sebastion Otte - Fachhochsule Wiesbaden Introduction to C++ Templates - Anthony Williams Efficient Run-Time Dispatching in Generic Programming with Minimal Code Bloat - Lubomir Bourdev & Jaakko Järvi Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 81/83

107 Fragen? Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 82/83

108 Vielen Dank für Ihre Aufmerksamkeit! Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 83/83

Programmieren in C++ Templates

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

Mehr

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

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

Mehr

Praxisorientierte Einführung in C++ (Variadische Funktionen)

Praxisorientierte Einführung in C++ (Variadische Funktionen) Praxisorientierte Einführung in C++ (Variadische Funktionen) Christoph Elbrechter, Florian Paul Schmidt Universität Bielefeld April 12, 2012 Christoph Elbrechter, Florian Paul Schmidt Praxisorientierte

Mehr

Die Anwesenheitspflicht beim Seminar gilt für diejenigen Teilnehmer, die einen Schein erwerben wollen. Für die Nachmittagsübungen gilt keine

Die Anwesenheitspflicht beim Seminar gilt für diejenigen Teilnehmer, die einen Schein erwerben wollen. Für die Nachmittagsübungen gilt keine 1 2 Die Anwesenheitspflicht beim Seminar gilt für diejenigen Teilnehmer, die einen Schein erwerben wollen. Für die Nachmittagsübungen gilt keine Anwesenheitspflicht; d.h. die Teilnehmer dürfen sie gerne

Mehr

variadic templates Templates mit variabler Argumentanzahl?

variadic templates Templates mit variabler Argumentanzahl? Templates mit variabler Argumentanzahl? bislang in C++98 nicht direkt möglich, stattdessen (geniale Idee von A. Alexandrescu): Typlisten template struct Typelist {!typedef T Head;!typedef

Mehr

kurze Wiederholung class templates

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

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

DAP2-Programmierpraktikum Einführung in C++ (Teil 2) DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 29 Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente

Mehr

Polymorphismus 44. Function.hpp. #include <string>

Polymorphismus 44. Function.hpp. #include <string> Polymorphismus 44 #include Function.hpp class Function { public: virtual ~Function() {}; virtual const std::string& get_name() const = 0; virtual double execute(double x) const = 0; }; // class

Mehr

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland. C++ Klassen, Vererbung Philipp Lucas phlucas@cs.uni-sb.de Sebastian Hack hack@cs.uni-sb.de Wintersemester 2008/09 saarland university computer science 1 Inhalt Klassen in C++ Sichtbarkeit Erzeugen von

Mehr

Crashkurs C++ Wiederholung

Crashkurs C++ Wiederholung Crashkurs C++ Wiederholung #include int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i

Mehr

4. Objektorientierte Programmierung mit C++

4. Objektorientierte Programmierung mit C++ 4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung der Sprachfamilie Erweiterungen der Sprache C: Ein- und Ausgabe, Referenzen, Speicherallokation und Freigabe Grundlagen des Typkonzepts

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

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

Mehr

Programmierkurs C++ Templates & STL (1/2)

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

Mehr

Container/ Collection: Klasse die (Pointer auf ) andere Klassen oder Typen int,char,bool etc. aufnimmt.

Container/ Collection: Klasse die (Pointer auf ) andere Klassen oder Typen int,char,bool etc. aufnimmt. Templates Container/ Collection: Klasse die (Pointer auf ) andere Klassen oder Typen int,char,bool etc. aufnimmt. Bsp.: einfach verkettete Liste Data Data Data Data Jeder Datenknoten nimmt ein Datenobjekt

Mehr

Grundlagen der Informatik 12. Strukturen

Grundlagen der Informatik 12. Strukturen 12. Strukturen Strukturen und deren Komponenten Strukturen im Projekt Dynamisch erstellte Strukturen Strukturen und Operatoren Strukturen und Funktionen Einfach verkettete Liste Grundlagen der Informatik

Mehr

C++ Templates. Wozu Templates? Definition von Templates. Gebrauch von Templates. Instanziierung und Organisation

C++ Templates. Wozu Templates? Definition von Templates. Gebrauch von Templates. Instanziierung und Organisation C++ Templates Wozu Templates? Definition von Templates Gebrauch von Templates Instanziierung und Organisation Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik Martin-Luther-Universität

Mehr

Fortgeschrittene Template-Techniken 295

Fortgeschrittene Template-Techniken 295 Fortgeschrittene Template-Techniken 295 C++ bietet eine Vielfalt weiterer Techniken für Templates: Templates können auch außerhalb von Klassen für einzelne Funktionen verwendet werden. Templates können

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case

Mehr

K Ergänzungen zur Einführung in C

K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K.1 Zeiger, Felder und Zeichenketten Zeichenketten sind Felder von Einzelzeichen (char), die in der internen Darstellung durch ein \0

Mehr

initializer lists (nicht für Referenzen... unklar warum...)

initializer lists (nicht für Referenzen... unklar warum...) initializer lists (nicht für Referenzen... unklar warum...) 1 class Y{ y ; Y &ref (y) ; // ok Y &ref {y ; // Fehler: g++, MS VS C++11 47 preventing narrowing int x = 7.3; // Ouch! void f(int); f(7.3);

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

FACHHOCHSCHULE MANNHEIM

FACHHOCHSCHULE MANNHEIM für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen

Mehr

Programmieren - C++ Templates

Programmieren - C++ Templates Programmieren - C++ Templates Reiner Nitsch 8471 reiner.nitsch@h-da.de Was sind Funktionstemplates? C++ unterscheidet zwischen Funktionstemplates (dieses Kapitel) und Klassentemplates (später). Funktionstemplates

Mehr

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

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

Mehr

Objektorientierte Programmierung mit C++ SS 2007

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

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default

Mehr

12/18/12 // POST: values of a and b are interchanged void swap (int& a, int& b) { int c = a; a = b; b = c;

12/18/12 // POST: values of a and b are interchanged void swap (int& a, int& b) { int c = a; a = b; b = c; Generische Funktionalität Generisches Programmieren Template-Funktionen, Template- Klassen, generisches Sortieren, Fibonacci- und Ackermann-Zahlen zur Kompilierungszeit n Viele Funktionen braucht man für

Mehr

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

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

Polymorphismus 179. Function.h. #include <string>

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

Mehr

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16 C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming

Mehr

Objektorientierte Programmierung II

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

Mehr

Variablen und Parameter

Variablen und Parameter D3kjd3Di38lk323nnm Variablen und Parameter Eine Variable repräsentiert einen Speicherbereich, der einen veränderbaren Wert enthält. Eine Variable kann eine lokale Variable, ein Parameter (value, ref oder

Mehr

PVK Informatik I 1.Teil. Grundlagen Variablen Operatoren Fallunterscheidung Schleifen Kurzschreibweise Pointer Array Dynamische Strukturen Funktionen

PVK Informatik I 1.Teil. Grundlagen Variablen Operatoren Fallunterscheidung Schleifen Kurzschreibweise Pointer Array Dynamische Strukturen Funktionen PVK Informatik I 1.Teil Grundlagen Variablen Operatoren Fallunterscheidung Schleifen Kurzschreibweise Pointer Array Dynamische Strukturen Funktionen 1 Grundlagen #include #include using

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

C++ Templates - eine kleine Einführung. Funktionstemplates. Fabian Scheler, Peter Ulbrich, Niko Böhm. 20. Oktober 2008

C++ Templates - eine kleine Einführung. Funktionstemplates. Fabian Scheler, Peter Ulbrich, Niko Böhm. 20. Oktober 2008 Überblick 1 Allgemein C++ Templates - eine kleine Einführung Fabian Scheler, Peter Ulbrich, Niko Böhm Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

Centrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger. Musterlösung 9

Centrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger. Musterlösung 9 Centrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger Musterlösung 9 // Header - Datei CisWstring. hpp # ifndef CISWSTRING_ HPP_ # define CISWSTRING_

Mehr

Programmieren - C++ Funktions-Templates

Programmieren - C++ Funktions-Templates Programmieren - C++ Funktions-Templates Reiner Nitsch 8471 r.nitsch@fbi.h-da.de Was sind Templates? C++ Templates ermöglichen generische Programmierung. Das ist Programmierung unabhängig vom speziellen

Mehr

Lösung der OOP-Prüfung WS12/13

Lösung der OOP-Prüfung WS12/13 2.1.2013 Lösung der OOP-Prüfung WS12/13 1. Aufgabe a) Da der Konstruktor im protected-bereich steht, können keine eigenständigen Objekte der Klasse angelegt werden. Durch den protected-konstruktor wird

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,

Mehr

C++ Templates - eine kleine Einführung

C++ Templates - eine kleine Einführung C++ Templates - eine kleine Einführung Peter Ulbrich, Martin Hoffmann Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19 Inhalt Generics

Mehr

Polymorphe for-anweisung 237

Polymorphe for-anweisung 237 Polymorphe for-anweisung 237 Beginnend mit C++11 wird for (for-range-declaration : expression) statement durch den Übersetzer zu folgendem Programmtext expandiert: { auto&& range = (expression); for (auto

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden

Mehr

C++ Klassen weitere Funktionen

C++ Klassen weitere Funktionen C++ Klassen weitere Funktionen Übersicht static Elemente const Elemente Zusätzliches zu Konstruktoren Kopier-Konstruktor Konvertierung-Konstruktor Initialisierungslisten Friend Funktionen 2 Statische Klassenkomponenten

Mehr

Funktionen: Rückgabewert

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

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf

Mehr

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16 C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 9. Dezember 2015 Wiederholung Referenzdatentypen reference [0] M datatype

Mehr

Ein kleiner Blick auf die generische Programmierung

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

Mehr

C++ Quellcodes zum Buch Kapitel 5

C++ Quellcodes zum Buch Kapitel 5 1 HARALD NAHRSTEDT C++ für Ingenieure Einführung in die objektorientierte Programmierung Erstell am 27.04.2009 C++ Quellcodes zum Buch Kapitel 5 Beschreibung Diese Seiten enthalten den Quellcode aus dem

Mehr

Konstruktor/Destruktor

Konstruktor/Destruktor 1/23 Konstruktor/Destruktor Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/23 Outline 1 2 3/23 Inhaltsverzeichnis 1 2

Mehr

Fortgeschrittene Template-Techniken 350

Fortgeschrittene Template-Techniken 350 Fortgeschrittene Template-Techniken 350 C++ bietet eine Vielfalt weiterer Techniken für Templates: Templates können auch außerhalb von Klassen für einzelne Funktionen verwendet werden. Templates können

Mehr

1 Einleitung Generizität Syntax... 2

1 Einleitung Generizität Syntax... 2 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 1 1.1 Generizität................................ 1 1.2 Syntax.................................. 2 2 Realisierung 2 2.1 Compilierung generischer Klassen...................

Mehr

C/C++ Programmierung

C/C++ Programmierung 1 C/C++ Programmierung Grundlagen: Der Präprozessor Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Der Präprozessor

Mehr

Praxis der Programmierung

Praxis der Programmierung Arrays, Pointerarithmetik, Konstanten, Makros Institut für Informatik und Computational Science Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Arrays (Felder/Vektoren) 2 Arrays: Motivation

Mehr

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println(Hello World! Hello world! Java class HelloWorld { static public void main(string args) { System.out.println("Hello World!"); } } C #include main() { printf("hello World!\n"); } C++ #include using

Mehr

HSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage

HSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage HSR Rapperswil 2001 Markus Rigling Programmieren: Exceptions 1 1. Auflage Inhaltsverzeichnis: 1. Was sind Exceptions?... 3 2. Struktur des Exception Handling... 3 3. Try-Block... 4 4. Exception Handler

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 11: Generic Methods Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 15 Inhalt

Mehr

Programmierkurs. Steffen Müthing. December 7, Interdisciplinary Center for Scientific Computing, Heidelberg University

Programmierkurs. Steffen Müthing. December 7, Interdisciplinary Center for Scientific Computing, Heidelberg University Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University December 7, 2018 Code Reuse Motivation Konzepte Vererbung (Idee) Templates Worum geht es? Datenstrukturen

Mehr

HSR Rapperswil 2001 Markus Rigling. Programmieren: Templates Auflage

HSR Rapperswil 2001 Markus Rigling. Programmieren: Templates Auflage HSR Rapperswil 2001 Markus Rigling Programmieren: Templates 1 1. Auflage Inhaltsverzeichnis: Templates.1 1. Verwendung 3 2. Erstellen einer Templateklasse. 3 3. Faustregel zum Erstellen eines Klassentemplates..

Mehr

Name: Klausur Informatik III WS 2003/04

Name: Klausur Informatik III WS 2003/04 1 : Methodenimplementierung ca. 42 Punkte Gegeben ist die Klasse Mitarbeiter. Listing 1: (./Code1/Mitarbeiter.h) using namespace std; // globale Variable fuer Ausgabedatei // kann entsprechend

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatorüberladung 2 Pointer Zeigervariable 3 CopyConstructor 4 Listen 5 Array String 6 STL Container

Mehr

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef Proseminar C-Programmierung Grundlagen und Konzepte Der Präprozessor von: Svenja Neef Inhaltsverzeichnis 1Der C-Präprozessor...2 1.1Was ist der C-Präprozessor...2 1.2Präprozessor-Befehle...2 1.2.1Zusammenführen

Mehr

C++ Templates - eine kleine Einführung. Allgemein. Funktionstemplates. Allgemein. Funktionstemplates. Klassentemplates

C++ Templates - eine kleine Einführung. Allgemein. Funktionstemplates. Allgemein. Funktionstemplates. Klassentemplates Überblick C++ Templates - eine kleine Einführung Fabian Scheler, Peter Ulbrich, Niko Böhm Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) Ablauf Informatik I (D-ITET) Übungsstunde 5, 26.10.2009 simonmayer@student.ethz.ch ETH Zürich Nachbesprechung Übung 3 Besprechung/Vertiefung der Vorlesung [21.10.2009] Vorbesprechung Übung 5 2.c) Test

Mehr

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16 C++ Teil 5 Sven Groß 16. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 16. Nov 2015 1 / 16 Themen der letzten Vorlesung Namensräume Live Programming zu A2 Gleitkommazahlen Rundungsfehler Auswirkung

Mehr

Informatik. Strukturen und Aufzählungstypen. Vorlesung

Informatik. Strukturen und Aufzählungstypen. Vorlesung Informatik Vorlesung 06 Strukturen und Aufzählungstypen 03. Dezember 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Datentypen Die bisher benutzten Datentypen waren

Mehr

Einführung in die STL

Einführung in die STL 1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/29 Outline 1 3/29 Inhaltsverzeichnis 1 4/29 Typisierung

Mehr

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mapra: C++ Teil 4 Felix Gruber IGPM, RWTH Aachen 6. Mai 2015 Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mai 2015 1 / 22 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien

Mehr

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung

Mehr

16. Structs und Klassen I. Rationale Zahlen, Struct-Definition, Operator-Überladung, Datenkapselung, Klassen-Typen

16. Structs und Klassen I. Rationale Zahlen, Struct-Definition, Operator-Überladung, Datenkapselung, Klassen-Typen 491 16. Structs und Klassen I Rationale Zahlen, Struct-Definition, Operator-Überladung, Datenkapselung, Klassen-Typen Rechnen mit rationalen Zahlen 492 Rationale Zahlen (Q) sind von der Form n d mit n

Mehr

Funktionen in Python

Funktionen in Python Funktionen in Python Prof. Dr. Rüdiger Weis Beuth Hochschule für Technik Berlin 1 / 31 1 def Anweisung 2 Argumentübergabe 3 Lokale Variablen 4 Default Argumente 5 Aufruf mit Schlüsselwort 6 Variable Argumente

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) Informatik I (D-ITET) Übungsstunde 2, 5.10.2009 ETH Zürich? Übungsgruppenwechsel? Abgabe der Übungen... Bis Mo, 24:00 Theorie: Programme: per mail oder auf Papier.cpp Datei per mail Bin euch noch Demos

Mehr

C++ - Objektorientierte Programmierung Polymorphie

C++ - Objektorientierte Programmierung Polymorphie C++ - Objektorientierte Programmierung Polymorphie hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen C++ - Objektorientierte Programmierung 21.06.16 Seite 1 Polymorphie

Mehr

2. Unterprogramme und Methoden

2. Unterprogramme und Methoden 2. Unterprogramme und Methoden Durch Methoden wird ausführbarer Code unter einem Namen zusammengefasst. Dieser Code kann unter Verwendung von sogenannten Parametern formuliert sein, denen später beim Aufruf

Mehr

Syntax und Kontrollstrukturen

Syntax und Kontrollstrukturen Syntax und Kontrollstrukturen Praktikum C-Programmierung Eugen Betke, Nathanael Hübbe, Michael Kuhn, Jakob Lüttgau, Jannek Squar Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg 2018-10-29

Mehr

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

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine

Mehr

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen Themen der Übung 1 Organisatorisches Methoden und Wrapperklassen 2 Methoden 3 Wrapper-Klassen CoMa-Übung IV TU Berlin 07.11.2012 Organisatorisches: Im Pool nur auf die Abgabeliste setzen, wenn ihr wirklich

Mehr

17. Klassen. Datenkapselung, Klassen, Memberfunktionen, Konstruktoren

17. Klassen. Datenkapselung, Klassen, Memberfunktionen, Konstruktoren 556 17. Klassen Datenkapselung, Klassen, Memberfunktionen, Konstruktoren Ein neuer Typ mit Funktionalität... 557 struct rational { int n; int d; // INV: d!= 0 // POST: return value is the sum of a and

Mehr

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

Programmierkurs. SoSe Markus Geveler Inst. f. Applied Mathematics, TU Dortmund. Programmierkurs SoSe 2013 Markus Geveler Inst. f. Applied Mathematics, TU Dortmund markus.geveler@math.tu-dortmund.de Lesson 5 Was machen wir heute hier? weiter mit Objektorientierter Programmierung viel

Mehr

Tag 4 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java) Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)

Mehr

Neuere Sprachelemente in Java

Neuere Sprachelemente in Java Softwaretechnik 1 Vorlesung Neuere Sprachelemente in Java Prof. Dr. Bernhard Rumpe Technische Universität Braunschweig http://www.sse.cs.tu-bs.de/ Seite 2 Neuerungen seit Java 5.0 Java Spracherweiterungen

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Klassenvariablen, Klassenmethoden

Klassenvariablen, Klassenmethoden Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden

Mehr

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen

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

Mehr

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Grundlagen. Die Komponenten eines C Programms. Das erste Programm Grundlagen 1. Die Komponenten eines C Programms 2. Ein Programm erzeugen und übersetzen 3. Variablen Deklarieren und Werte zuweisen 4. Zahlen eingeben mit der Tastatur 5. Arithmetische Ausdrücke und Berechnungen

Mehr

Herzlich willkommen!

Herzlich willkommen! Programmiertechnik 1 Herzlich willkommen! Dozent: Dipl.-Ing. Jürgen Wemheuer Teil 6: Zusammenfassung und Beispiele Mail: wemheuer@ewla.de Online: http://cpp.ewla.de/ Zusammenfassung (1) 2 1. Programm in

Mehr

Generative Programmierung

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.

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl

Mehr

Polymorphie. Überladen. Definition Methodennamen überladen Konstruktoren überladen Operatoren überladen Beispiele. Dr.

Polymorphie. Überladen. Definition Methodennamen überladen Konstruktoren überladen Operatoren überladen Beispiele. Dr. Polymorphie Überladen Definition Methodennamen überladen Konstruktoren überladen Operatoren überladen Beispiele Dr. Beatrice Amrhein Definition 2 Definition: Überladen (von Namen) Überladen bedeutet, dass

Mehr

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

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14 C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung

Mehr

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Standardisierung durch die ECMA und ISO Short Introduction to C# C# (C

Mehr

Grundlagen von C# - 1

Grundlagen von C# - 1 Grundlagen von C# - 1 Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Über diesen Kurs 2. Benötigte Software 3. Exkurs: Architektur von.net und C# 4. Erstes Programm: Hello World Grundlegende Eigenschaften

Mehr