C++ für Wissenschaftliches Rechnen

Größe: px
Ab Seite anzeigen:

Download "C++ für Wissenschaftliches Rechnen"

Transkript

1 C++ für Wissenschaftliches Rechnen Dan Popović Interdisziplinäres Institut für Wissenschaftliches Rechnen, Universät Heidelberg 24. Oktober 2011 Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

2 C++ für Wissenschaftliches Rechnen 1 Warum C++? Motivation 2 Vorausgesetzte Techniken 3 Das erste Programm 4 Grundlagen C++ Datentypen Kontrollfluss Funktionen 5 Zeiger und Referenzen 6 Abstrakte Datentypen und ihre Realisierung in C++ Klassen Konstruktoren und Destruktoren 7 Templates und generische Programmierung 8 Die Standard Template Library (STL) Bespiel einer Container-Klasse: Vektoren Das Iterator-Interface 9 Built-in Algorithmen der STL 10 Vererbung in C++ 11 Virtuelle Funktionen und abstrakte Basisklassen DanVirtuelle Popović (IWR, Funktionen Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

3 Warum C++? Motivation Anforderungen an die Programmiersprache Effizienz... des Programms der Entwicklung Hardware-nahe Programmiersprachen Integration mit existierendem Code Abstraktion Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

4 Warum C++? Motivation Vergleich von C++ mit anderen Sprachen Fortran & C + schneller Code + gute Optimierungen nur prozedurale Sprachen wenig Flexibilität schlechte Wartbarkeit C++ + gute Wartbarkeit + schneller Code + gute Integration mit Fortran und C Bibliotheken + hoher Abstraktionsgrad schwerer zu optimieren meistens mehr Speicherverbrauch Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

5 Literatur Literatur Literatur zu C++ B. Stroustrup: C++ Die Programmiersprache (Die Bibel) A. Willms: C++ Programmierung (Für Anfänger gut geeignet) B. Eckel: Thinking in C++, Volume Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

6 Vorausgesetzte Techniken Grundlegende vorausgesetzte C++-Kenntnisse Um die Vorzüge von C++ auszunutzen, sind abstrakte Techniken notwendig. Folgende grundlegenden Konzepte sind als Basis unumgänglich: Grundlegende Datentypen und Kontrollstrukturen: int, double, bool, char,... conditionals: if, switch,... loops: for, while Grundlegende Programmstrukturen: Funktionen Rekursive und iterative Programmierung Zeiger und Referenzen Klassen und Vererbung class und struct private, public, protected Konstruktoren und Destruktoren public, private-vererbung (rein) virtuelle Funktionen abstrakte Basisklassen Polymorphismus von Funktionen, Überladen von Operatoren Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

7 Das erste Programm Ein erstes Programm: Hallo, Welt! 1 // include i/o library 2 # include <iostream > 3 4 // main is always the first function to be called 5 // argc: counts program arguments 6 // argv: pointer to C-Strings containing the arguments 7 int main ( int argc, char ** argv ) 8 { 9 std :: cout << " Hello, World... " << std :: endl ; // return value of function 12 return 0; 13 } Das Erstellen des Executables erfordert hier nur einen Compiler (g++): Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

8 Das erste Programm Übersetzen unter Linux Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

9 Grundlagen C++ Datentypen Datentypen in C++ Die elementaren Datentypen in C++ sind: int: Ganzzahlen, int a = 2; long: Große Ganzzahlen, long a = 1e15; char: Zeichen, char a = b ; float: Gleitkommazahlen 4 Byte, float b = 3.14; double: Gleitkommazahlen 8 Byte, double c = ; bool: Wahrheitswerte, bool d = false; Daneben gibt es eine Vielzahl erweiterter Datentypen und die Möglichkeit, beliebige eigene zu definieren. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

10 Vezweigungen Grundlagen C++ Kontrollfluss if-verzweigungen: 1 # include <iostream > 2 3 int main ( int argc, char ** argv ) 4 { 5 int a = 5; // an integer variable 6 if (a > 0) 7 { 8 std :: cout << " Hello, World... " << std :: endl ; 9 } 10 else 11 { 12 return 1; // emit an error 13 } return 0; 16 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

11 Grundlagen C++ Realisierung von Schleifen Kontrollfluss for-schleifen, while-schleifen, do..while-schleifen. 1 # include <iostream > 2 3 int main ( int argc, char ** argv ) 4 { 5 for ( int i =1; i <10; ++i) 6 std :: cout << " i: " << i << std :: endl ; 7 8 int j = 5; 9 while ( j > 0) 10 { 11 std :: cout << " j: " << j << std :: endl ; 12 j - -; 13 } return 0; 16 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

12 Grundlagen C++ Realisierung von Schleifen Kontrollfluss Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

13 Grundlagen C++ Funktionen Funktionen Funktionen Funktionen dienen zur Kapselung von Programmabschnitten und können bei Bedarf aufgerufen werden. In C++ haben sie immer die Syntax 1 Rueckgabetyp Funktionsname ( Parameter1, Parameter2,..) ; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

14 Grundlagen C++ Funktionen Ein Beispielprogramm mit Funktion 1 # include <iostream > 2 3 using namespace std ; // use namespace std globally (here ok, 4 // avoid this in the general case) 5 6 // A function that greets everyone 7 void greet () 8 { 9 // do not need namespace-selector std:: any more 10 cout << " Hello, World." << endl ; 11 } // main function 14 int main ( int argc, char ** argv ) 15 { 16 greet (); 17 return 0; 18 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

15 Grundlagen C++ Funktionen Call-by-Reference und Call-by-Value Bei Call-by-Value wird die Adresse des Objekts als Funktionsparameter übergeben und keine Kopie des Objekts erzeugt: 1 // call-by-value 2 void swap_wrong ( int a, int b) 3 { 4 int tmp = a; 5 a = b; // does not work, a and b are local copies 6 b = tmp ; // in the scope of the function 7 } 8 9 // call-by-reference 10 void swap_right ( int & a, int & b) 11 { 12 int tmp = a; // a, b are reference parameters 13 a = b; // That means changes to them are 14 b = tmp ; // persistant after end of function call 15 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

16 Grundlagen C++ Funktionen Call-by-Reference und Call-by-Value 1 // main function 2 int main ( int argc, char ** argv ) 3 { 4 int a=5, b =6; 5 6 // Ausgabe 5, 6 7 swap_wrong (a, b) 8 std :: cout << a << ", " << b << std :: endl ; 9 10 // Ausgabe 6, 5 11 swap_right (a, b) 12 std :: cout << a << ", " << b << std :: endl ; return 0; 15 } Sollen Änderungen einer Funktion Bestand haben, müssen immer Referenz-Variablen verwendet werden (wie bei swap_right). Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

17 Zeiger und Referenzen Zeiger und Referenzen Eines der kompliziertesten Themen in C/C++ sind Zeiger und Referenzen. Zeiger und der Adressoperator & int x = 12 Die Variable x ist definiert durch Adresse, Größe (benötigter Speicherplatz), Name und Inhalt. Um den Wert der Adresse (nicht der Variablen x!) zu ermitteln, gibt es den Adressoperator &: std::cout << &x << std::endl Ausgabe: 0xA Adresswerte können in sogenannten Zeigervariablen gespeichert werden. Zeiger haben die Syntax typ *name, wobei typ der Typ der Variablen (des Objekts) ist, auf den der Zeiger name zeigt. Beispiel: int* z = &x; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

18 Zeiger und Referenzen Zeiger und Referenzen Der Dereferenzierungsoperator * int* z = &x; Über die Zeigervariable z kann der Wert der Variablen x verändert werden (Dereferenzierungsoperator *): *z = 4711; bedeutet, daß die Variable x den Wert 4711 zugewiesen bekommnt. Achtung! Mit dem Dereferenzierungsoperator wird nicht der Zeiger z verändert (z zeigt immer noch auf die Speicheradresse von x). Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

19 Zeiger und Referenzen Zeiger und Referenzen Der Dereferenzierungsoperator * int* z = &x; Über die Zeigervariable z kann der Wert der Variablen x verändert werden (Dereferenzierungsoperator *): *z = 4711; bedeutet, daß die Variable x den Wert 4711 zugewiesen bekommnt. Achtung! Mit dem Dereferenzierungsoperator wird nicht der Zeiger z verändert (z zeigt immer noch auf die Speicheradresse von x). Referenzen Neben Zeigervariablen gibt es Referenzen. Referenzen sind intern Zeiger. Referenzen kann man sich als anderen Namen für eine Variable vorstellen: 1 int x = 5; 2 int & y = x; // anderer Name fuer x 3 y = 4; // bedeutet x = 4! Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

20 Zeiger und Referenzen Zeiger und Referenzen Beispiele für Zeiger und Referenzen 1 int i, j, *p, *q; 2 int & s = i, & r = j; // Referenzen muessen initialisiert werden 3 4 r = 2; // OK, j (==r) hat jetzt Wert 2 5 r = &j; // BAD, &j hat falschen Typ int * statt int 6 7 p = 2; // BAD, 2 hat falschen Typ int statt int * 8 p = &j; // OK, p enthaelt nun Adresse von j 9 10 if ( p == q) // WAHR, falls p, q auf die gleiche Adresse zeigen 11 // Der Inhalt der Adresse ist egal if (r == s) // WAHR, falls Inhalt von j (Referenz von r) und i 14 // (Referenz von s) gleich ist. Die Adresse der 15 // Variablen ist egal! Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

21 Zeiger und Referenzen Zeiger und Referenzen Felder (Mehrdimensionale) Felder sind nichts anderes als Zeiger auf den ersten Feldeintrag: 1 int a [5]; // Feld von 5 int-variablen 2 3 a [0] = 3; 4 std :: cout << *a; // output: 3 (= a[0]) 5 std :: cout << & a; // output: Adresse von a[0] 6 7 int a [3][20]; // 3 x 20 - Feld Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

22 Zeiger und Referenzen Zeiger und Referenzen Verschachtelungen Zeiger erlauben beliebig komplizierte Konstrukte: 1 int ** p; // p enthaelt Zeiger, die auf Variablen des 2 // Typs int zeigen 3 4 int * p [10]; // p ist ein Feld, das 10 int-variablen enthaelt, 5 // denn die Klammern [] binden staerker als *. 6 // D.h. int * ist der Typ der Feldelemente! 7 8 int (*p) [10]; // Jetzt hingegen ist p ein Zeiger auf ein 9 // Feld mit 10 int-komponenten int * f() // f ist eine parameterlose Funktion, die 12 // einen Zeiger auf int zurueckgibt. 13 // Runde Klammern binden staerker, wie oben! Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

23 Abstrakte Datentypen und ihre Realisierung in C++ Klassen und Datentypen Klassen Eine C++-Klasse definiert einen Datentyp. Ein Datentyp ist eine Zustandsmenge mit Operationen, die die Zustände ineinander überführen. Beispiel komplexe Zahlen: 1 # include <iostream > 2 3 class ComplexNumber { // a class defintion 4 public : 5 void print () 6 { 7 std :: cout << u << " + i * " << v << std :: endl ; 8 } 9 10 private : 11 double u, v; 12 }; // ; is very important! int main ( int argc, char ** argv ) 15 { 16 ComplexNumber a, b, c; 17 a. print (); // print unitialized (!) number //c = a + b; // where defined? return 0; 22 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

24 Abstrakte Datentypen und ihre Realisierung in C++ Klassen Klassen und Datentypen C++ ermöglicht die Kapselung des Datentyps, d.h. Trennung von Implementierung und Interface. public: Interface-Spezifikation, private: Daten und Implementierung. Von außen kann nur auf Methoden und Daten im public-teil zugegriffen werden. Implementierung der Methoden kann ausserhalb der Klasse geschehen. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

25 Abstrakte Datentypen und ihre Realisierung in C++ Konstruktoren und Destruktoren Konstruktoren Der Befehl ComplexNumber a; veranlasst den Compiler, eine Instanz der Klasse zu erzeugen. Zur Initialisierung wird ein Konstruktor aufgerufen. Es können verschiedene Konstruktoren existieren (Polymorphismus!). In gewissen Fällen erzeugt der Compiler default-konstruktoren. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

26 Abstrakte Datentypen und ihre Realisierung in C++ Konstruktoren Konstruktoren und Destruktoren Die Klasse ComplexNumber mit zwei Konstruktoren: 1 class ComplexNumbers 2 { 3 public : 4 // some constructors 5 ComplexNumber () { u = 0; v = 0; } // default 6 7 ComplexNumber ( double re, double im) // initialize with 8 { u = re; v = im; } // given numbers 9 10 void print () {... } private : 13 double u, v; 14 }; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

27 Abstrakte Datentypen und ihre Realisierung in C++ Konstruktoren Konstruktoren und Destruktoren 1 // usage of the complex number class 2 int main ( int argc, char ** argv ) 3 { 4 ComplexNumber a (3.0,4.0) ; 5 ComplexNumber b (1.0,2.0) ; 6 ComplexNumber c; 7 8 a. print (); // output: 3 + i * 4 9 c = a + b; // where defined? return 0; 12 }; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

28 Abstrakte Datentypen und ihre Realisierung in C++ Konstruktoren und Destruktoren Destruktoren Dynamisch erzeugte Objekte können vernichtet werden, falls sie nicht mehr benötigt werden. Das Löschen von Objekten übernimmt der Destruktor. Destruktoren sind insbesondere auszuimplementieren, wenn die Klasse Zeiger (etwa Felder!) enthält. Ebenso bei Verwendung von dynamischen Speicher in einer Klasse. Stichworte zur dynamischen Speicherverwaltung: new, delete. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

29 Abstrakte Datentypen und ihre Realisierung in C++ Konstruktoren und Destruktoren Überladen von Operatoren Operationen für abstrakte Datentypen (Klassen) Die Anweisung a + b ist für ComplexNumber nicht definiert und muss erklärt werden. Für Klassen können verschiedene Operationen wie ++,+,*,/,-,--,=,!=,!,==,[],... ausimplementiert werden. Klassen, die den Operator () implementieren, heißen Funktoren. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

30 Templates und generische Programmierung Templates Templates Code-Schablonen Templates ermöglichen die Parametrisierung von Klassen und Funktionen. Templates entkoppeln Funktionen oder Algorithmen vom Datentyp. Zulässige Parameter: Standard-Typen wie int, double,..., Eigene Typen (Klassen), Templates. Templates ermöglichen statischen Polymorphismus (siehe später). Templates verallgemeinern Code Generische Programmierung. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

31 Templates und generische Programmierung Beispiel: Templatisierte Funktion 1 # include <iostream > 2 3 // example for a function template 4 template <class T> 5 T getmax ( const T& a, const T& b) 6 { 7 return (a>b)? a : b; 8 } 9 10 int main () 11 { 12 int i = 5, j = 6, k; 13 double l = 10.4, m = 10.25, n; k = getmax <int >(i,j); n = getmax < double >(l,m); 16 std :: cout << k << ", " << n << std :: endl ; 17 // output: 6, return 0; 20 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

32 Templates und generische Programmierung Beispiel: Templatisierte Array-Klasse 1 // a class that takes a template parameter 2 template < typename T> class Array 3 { 4 public : 5 int add ( const T& next, int n); // add next at data[n] 6 T& at( int n); 7 T& operator []( int n) { return at( n); } // overloaded operator 8 9 private : 10 T data [10]; 11 }; // add a new data member 14 template <class T> int Array <T >:: add ( const T& next, int n) 15 { 16 if (n >=0 && n <10) 17 { 18 data [ n] = next ; return 0; 19 } 20 else return 1; 21 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

33 Templates und generische Programmierung Beispiel: Templatisierte Array-Klasse 1 // get a certain data member 2 template <class T> T& Array <T >:: at( int n) 3 { 4 if (n >=0 && n <10) return data [ n]; 5 } 6 7 // main program 8 # include <iostream > 9 int main () 10 { 11 Array <int > c; c. add (3,0) ; c. add (4,5) ; c. add (0,1) ; 12 std :: cout << c.at (5) << std :: endl ; 13 // output: Array <char > d; d. add ( x,9); 16 std :: cout << d.at (9) << std :: endl ; 17 // output: x return 0; 20 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

34 Templates und generische Programmierung Weiteres zu Templates Mehrere Template-Parameter sind möglich Parameter können default-werte haben Templates können ausspezialisiert werden (für Sonderfälle) Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

35 Die STL STL Die Standard Template Library In C++ gibt es viele vorgefertigte Template-Container, die ohne Kenntnis der Implementierung verwendet werden können. Sie sind in einer Bibliothek, der STL, zusammengefasst. Die STL ist eine Sammlung von Template Klassen und Algorithmen, bietet viele Containerklassen (Klasse, die eine Menge anderer Objekte verwaltet), hat dabei vereinheitlichte User-Interfaces für die Container, ist in der C++-Standardbibliothek enthalten. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

36 Die STL Container-Arten der STL Die STL stellt verschiedene Arten von Containern bereit: Sequentielle Container Beispiele: Vektoren, Listen Container adapter Eingeschränktes Interface zu beliebigen Containern Beispiele: Stacks, Queues Assoziative Container Schlüssel-Wert Container Beispiel: Maps, Multimaps Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

37 Die STL Vor- und Nachteile der STL Vor- und Nachteile der STL + Dynamisches Speichermanagment + Vermeidung von array-überläufen + Hohe Qualität der Container + Optimierbarkeit durch statischen Polymorphismus Unübersichtliche Fehlermeldungen Hohe Anforderungen an Compiler und Entwickler Nicht alle Compiler sind STL-fähig (obwohl die STL im C++-Standard enthalten ist) Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

38 Die STL Bespiel einer Container-Klasse: Vektoren Beispiele für die Verwendung von STL-Containern: vector 1 # include <iostream > 2 # include <vector > 3 4 int main () { 5 // example usage of an STL vector 6 int result = 0; 7 std :: vector <int > x (100) ; for ( int j =0; j <100; j ++) x[ j] = j; 11 x. push_back (100) ; for ( int j =0; j<x. size (); j ++) 14 result += x[ j]; // output: std :: cout << result << std :: endl ; return 0; 20 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

39 Die STL Das Iterator-Interface Das Iterator-Interface Iteratoren bieten Zugriff auf die Elemente eines Containers. Sie Iterieren über die Elemente eines Containers, Liefern Zeiger auf Container-Elemente, Werden von jeder Container-Klasse bereitgestellt, Gibt es in rw - und einer w -Varianten, Helfen, array-überläufe zu vermeiden. Die Iteratoren werden von vielen STL-Algorithmen wie Sortieren, Suchen u. ä. verwendet. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

40 Die STL Das Iterator-Interface Beispiel: Iteratorieren über eine Map 1 # include <iostream > 2 # include <map > 3 # include <cstring > 4 5 int main () 6 { 7 // example usage of an STL-map 8 std :: map <std :: string, int > y; 9 10 y[" eins "] = 1; y[" zwei "] = 2; 11 y[" drei "] = 3; y[" vier "] = 4; std :: map < std :: string, int >:: iterator it; 14 for (it=y. begin (); it!=y. end (); ++ it) 15 std :: cout << it -> first << ": " << it -> second << std :: endl ; 16 // output: 1: eins 17 // 2: zwei... usw return 0; 20 } Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

41 STL Algorithmen Algorithmen Algorithmen, die die STL bereitstellt Die STL enthält viele hilfreiche Algorithmen, die Elemente eines Datencontainerns manipulieren können, die Iteratoren zum Elementzugriff verwenden. Beispiele: Sortieren Suchen Kopieren Umkehren der Reihenfolge im Container... Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

42 STL Algorithmen Algorithmen Beispiel: Sortier-Algorithmen für Vektoren Verschiedene Sortierungen für Vektoren stehen bereit Unterscheidung z.b. durch: Benutzte Vergleichsoperation Bereich der Sortierung Stabilität Komplexität des Standard-Sortierers für Vektoren: O(n log n) ideal O(n 2 ) ungünstigster Fall eigene Vergleichsfunktionen möglich Achtung: (doppelt verkettete) Listen sind auf Einfügen und Löschen von Elementen optimiert spezielle Sortier-Algorithmen Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

43 Algorithmen STL Algorithmen Beispiel: Verwendung eines Sortier-Algorithmus für Vektoren 1 // a vector for integers 2 vector <int > x; 3 4 x. push_back (23) ; x. push_back ( -112) ; 5 x. push_back (0) ; x. push_back (9999) ; 6 x. push_back (4) ; x. push_back (4) ; 7 8 // sort the integer vector 9 sort (v. begin (), v. end ()); // output: for ( int i = 0; i<x. size (); i ++) 13 cout << x[i] << "\t"; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

44 Vererbung in C++ Vererbung in C++ Vererbung Datentyp gibt seine Abstraktion an anderen Datentyp weiter. Ist-ein Relation: Dreieck ist ein geometrisches Objekt, d.h. Klasse Dreieck ist von Klasse GeomObject abzuleiten. Nicht zu verwechseln mit einer Enthält-ein Relation: Ein Dreieck enthält drei Punkte (aber ein Dreick ist kein Punkt keine Vererbung). Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

45 Vererbung in C++ Vererbung in C++ 1 // example of inheritance in C++ 2 class Matrix { 3 public : private : 6 double data [3][3]; // (3 x 3)-Matrix 7 }; 8 9 // the derived class: symmetrical matrix is a matrix 10 class SymMatrix : public Matrix { 11 public : 12 double getentry ( int i, int j) { return data [ i][ j]; } 13 // error: data private in base class 14 // performance? // constructor calls a constructor of base class 17 SymMatrix () : Matrix () {... } 18 }; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

46 Vererbung in C++ Verschiedene Arten der Vererbung in C++ Bei Vererbung ist darauf zu achten, auf welche Member die abgeleitete Klasse Zugriff erhält verschiedene Arten der Vererbung: private-vererbung: Alle Elemente der Basisklasse werden private Member der abgeleiteten Klasse. public-vererbung: public-member der Basisklasse werden public-member der abgeleiteten Klasse, private wird zu private. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

47 Virtuelle Funktionen und abstrakte Basisklassen Virtuelle Funktionen Virtuelle Funktionen Virtuelle Funktionen erlauben, dass abgeleitete Klassen Methoden der Basisfunktionen überdecken: 1 class GeomObject { // base class for geo objects 2 public : // area is a function member 3 virtual double area () { return 0.0; } }; 6 7 class Triangle : 8 public GeomObject { // a derived class 9 public : // has a specific member area as well! 10 double area () 11 { 12 return 0.5 * a * h; 13 } private : 16 double h, a; 17 }; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

48 Virtuelle Funktionen und abstrakte Basisklassen Virtuelle Funktionen Virtuelle Funktionen Wenn Basis- und abgeleitete Klasse enthalten Mitglieder gleichen Namens enthalten Welche Methode wird aufgerufen? 19 int main () { 20 GeomObject * geo ; 21 Triangle t; geo = &t; 24 std :: cout << geo -> area << std :: endl ; //? return 0; 27 }; Lösung: Falls nicht anders angegeben, die Methode des Basisobjekts (!). Durch das Schlüsselwort virtual wird der Aufruf an die abgeleitete Klasse durchgereicht. Stichwort Late Binding, d.h. Zuordnung Methodenname Implementierung erst zur Laufzeit. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

49 Virtuelle Funktionen und abstrakte Basisklassen Virtuelle Funktionen Dynamischer Polymorphismus Die Technik der späten Typ-Bindung mit virtuellen Funktionen hat einen eigenen Namen: Dynamischer Polymorphismus Genaue Typbestimmung zur Laufzeit. Realisierung über: - Virtuelle Funktionen (function lookup table), - Überschreiben von Funktionen. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

50 Virtuelle Funktionen und abstrakte Basisklassen Virtuelle Funktionen Dynamischer Polymorphismus Die Technik der späten Typ-Bindung mit virtuellen Funktionen hat einen eigenen Namen: Dynamischer Polymorphismus Genaue Typbestimmung zur Laufzeit. Realisierung über: - Virtuelle Funktionen (function lookup table), - Überschreiben von Funktionen. Vorteile des dynamischen Polymorphismus Basisklassen sind Obermengen der abgeleiteten Klassen Algorithmen, die auf Basisklasse operieren, können auch auf den abgeleiteten Klassen operieren. Beispiel: Liste, die Pointer auf GeomObjects speichert. Pointer kann auf ein Triangle-Objekt oder jedes andere GeomObject-Objekt zeigen! Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

51 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen Oftmals sind virtuelle Funktionen nicht sinnvoll in der Basisklasse definierbar. Dann Deklararation der Funktion in der Basisklasse als rein virtuell : virtual area() = 0. Abgeleitete Klassen müssen rein virtuelle Funktionen implementieren. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

52 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen Abstrakte Basisklassen Enthält eine Basis-Klasse eine rein virtuelle Funktionen, heisst die Klasse abstrakt. Von abstrakten Klassen können keine Objekte instanziiert werden. Eine abstrakte Basisklasse definiert einheitliches Erscheinungsbild (Interface) einer Abstraktion. Algorithmen operieren auf diesem Interface, d.h. unabhängig der tatsächlichen Implementierung. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

53 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen Beispiel: Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

54 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen Beispiel: Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

55 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen Erklärung des Beispiels: Der Algorithmus Mittelpunktsregel integriert beliebige Funktionen Es existiert eine (u.u. abstrakte) Basis-Klasse für Funktionen Allgemeine Funktionen wie Polynome, Sinus,... werden von der Basisklasse abgeleitet. Mittelpunktsregel operiert nur auf der Funktionsschnittstelle! Es folgt der Code zum Beispiel, es wird ein Sinus integriert: Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

56 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen // main.cpp: Test der Integration mit der Funktions-Schnittstelle // System-Header inkludieren #include <c s t d l i b > #include <i o s t r e a m> #include <cmath> // eigene Header inkludieren #i n c l u d e s in us. h #i n c l u d e m i t t e l p u n k t s r e g e l. h // main-funktion i n t main ( i n t argc, char argv ) { // Objekt der Klasse Mittelpunktsregel anlegen MittelpunktsRegel mipur (100) ; // Sinus-Objekt erzeugen Sinus s1 ; // Integration der Polynome testen s t d : : cout << I n t e g r a l S i n u s : << mipur. i n t e g r a l A u s w e r t e n ( s1, 2.0,2.0) << s t d : : e n d l ; s t d : : cout << I n t e g r a l S i n u s : << mipur. i n t e g r a l A u s w e r t e n ( s1, ,6.2890) << s t d : : e n d l ; s t d : : cout << s t d : : e n d l ; } r e t u r n 0 ; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

57 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen // mittelpunktsregel.h: Die Klasse Mittelpunktsregel #i n c l u d e funktion. h #i f n d e f MIPUREGEL H #d e f i n e MIPUREGEL H // Mittelpunktsregel-Klasse c l a s s M i t t e l p u n k t s R e g e l { public : M i t t e l p u n k t s R e g e l ( i n t a n z a h l ) : n ( a n z a h l ) {} M i t t e l p u n k t s R e g e l ( ) {}; // Integral einer Funktion auswerten double i n t e g r a l A u s w e r t e n ( F u n k t i o n& f, double a, double b ) c o n s t { double e r g = 0. 0 ; double h = (b a ) /(1.0 n ) ; // Laenge der Intervalle // Anteile der einzelnen Boxen aufsummieren f o r ( i n t i =0; i<n ; ++i ) { double x = a + i h h ; // Intervall-Mittelpunkt erg += h f. auswerten ( x ) ; // Funktionsauswertung } r e t u r n erg ; } private : i n t n ; }; #e n d i f Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

58 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen // funktion.h: Abstrakte Schnittstellenklasse fuer Funktionen // Inklusions-Waechter #i f n d e f FUNKTION H #d e f i n e FUNKTION H // Abstrakte Basisklasse fuer Funktionen c l a s s F u n k t i o n { public : // Konstruktoren F u n k t i o n ( ) {}; // virtueller Destruktor v i r t u a l F u n k t i o n ( ) {}; // Funktion auswerten, rein virtuell! v i r t u a l double a u s w e r t e n ( double x ) c o n s t = 0 ; private : }; #e n d i f Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

59 Virtuelle Funktionen und abstrakte Basisklassen Rein virtuelle Funktionen und abstrakte Basisklassen Abstrakte Basisklassen und Schnittstellen #include <cmath> // inkludiere Basisklasse / Schnittstelle #i n c l u d e funktion. h #i f n d e f SINUS H #d e f i n e SINUS H // Kapselungs-Klasse fuer den Sinus c l a s s S i n u s : p u b l i c F u n k t i o n { p u b l i c : S i n u s ( ) {} // Erfuellung der Schnittstelle double a u s w e r t e n ( double x ) c o n s t { r e t u r n s i n ( x ) ; } p r i v a t e : }; #e n d i f Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

60 Polymorphismen Statischer vs. Dynamischer Polymorphismus Dynamischer Polymorphismus Der ganz normale Polymorphismus. Anwendung: Interface-Definitionen über abstrakte Basisklassen. Erlaubt Austauschbarkeit zur Laufzeit. Verhindert eine Vielzahl von Optimierungen, z.b. inlining, loop unrolling. Zusätzlicher Overhead (function lookup table). Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

61 Polymorphismen Statischer vs. Dynamischer Polymorphismus Dynamischer Polymorphismus Der ganz normale Polymorphismus. Anwendung: Interface-Definitionen über abstrakte Basisklassen. Erlaubt Austauschbarkeit zur Laufzeit. Verhindert eine Vielzahl von Optimierungen, z.b. inlining, loop unrolling. Zusätzlicher Overhead (function lookup table). Statischer Polymorphismus Erlaubt lediglich Austauschbarkeit zur Compile-Zeit. Erlaubt alle Optimierungen. Längere Kompilierzeiten. Reduziert den Overhead der Interfaces. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

62 Polymorphismen Statischer vs. Dynamischer Polymorphismus Techniken zur Realisierung der Polymorphismen: statisch: Templates Überladen von Funktionen Engine -Technik dynamisch: virtuelle Funktionen Überschreiben von Funktionen Statischer Polymorphismus erlaubt es, Algorithmen und Datenstrukturen zu trennen (Interfaces), wird aber zur Compilezeit ausgewertet und erlaubt exzessives Optimieren. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

63 Polymorphismen Dynamischer Polymorphismus Beispiel: Dynamischer Polymorphismus bei Matrix-Klasse 1 // base class 2 class Matrix { 3 virtual bool issymmetricpositivedefinit (); 4 }; 5 6 // symmetric matrices 7 class SymmetricMatrix : public Matrix { 8 virtual bool issymmetricpositivedefinit () {... }; 9 }; // upper triangular matrices 12 class UpperTriangularMatrix : public Matrix { 13 virtual bool issymmetricpositivedefinit () 14 { return false }; 15 }; Die Abfrage Ist die Matrix symmetrisch positiv definit wird von der Basisklasse an die abgeleiteten Klassen durchgereicht. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

64 Polymorphismen Dynamischer Polymorphismus Beispiel: Dynamischer Polymorphismus bei Matrix-Klasse 1 // base class 2 class Matrix { 3 virtual bool issymmetricpositivedefinit (); 4 }; 5 6 // symmetric matrices 7 class SymmetricMatrix : public Matrix { 8 virtual bool issymmetricpositivedefinit () {... }; 9 }; // upper triangular matrices 12 class UpperTriangularMatrix : public Matrix { 13 virtual bool issymmetricpositivedefinit () 14 { return false }; 15 }; Der Ansatz mit virtuellen Funktionen ist hier unter Umständen nicht performant. Ausweg: Statischer Polymorphismus (hier: Engine-Konzept). Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

65 Das Engine-Konzept Polymorphismen Statischer Polymorphismus und Engines 1 // example delegation of a method to an engine 2 template < class Engine > class Matrix { 3 Engine engineimp ; 4 5 bool IsSymmetricPositiveDefinit () 6 { return engineimp. issympositivedefinite (); } 7 }; 8 9 // some engine classes 10 class Symmetric { 11 bool issympositivedefinite () 12 { / check i f m a t r i x i s spd. /} 13 }; class UpperTriangle { 16 bool issympositivedefinite (){ return false ; } 17 }; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

66 Das Engine-Konzept Polymorphismen Statischer Polymorphismus und Engines 1 // usage (compiler evaluates Type of A!) 2 UpperTriangle upper ; // create upper matrix 3 4 Matrix < UpperTriangle > A( upper ); // pass upper to some 5 // constructor of A 6 7 std :: cout << A. issympositivedefinite () << std :: endl ; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

67 Polymorphismen Statischer Polymorphismus und Engines Das Engine-Konzept Der Engine-Ansatz Aspekte der verschiedenen Matrizen sind in den Engines (Symmetric oder UpperTriangular) verpackt. Matrix delegiert die meisten Operationen an die Engine zur Compile-Zeit! Dynamischer Polymorphismus durch statischen (Templates) ersetzt. Nachteil: Der Basis-Typ (Matrix) muss alle Methoden aller Subklassen enthalten. Der Trick, dies zu vermeiden, nennt sich Barton-Nackmann-Trick. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

68 Template Meta Programming Template Meta Programming Entscheidende Technik des statischen Polynorphismus sind Templates. Mit den Templates ist eine Programmiertechnik für Meta-Programme enstanden: Template Meta Programme Idee: Der Compiler agiert als Interpreter. Ersetzen von Kontrollstrukturen wie if und Loops durch Spezialisierung und Rekursion. Theoretisch: Turing-Maschine durch Template Programming möglich. Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

69 Template Meta Programming Beispiel eines Template Meta Programms: Fakultät (T. Veldhuizen) // factorial realized as TMP template < int N> class Factorial { public : enum { value = N * Factorial <N -1 >:: value }; }; // a specialization is needed to break class Factorial <1 > { public : enum { value = 1 }; }; der Wert N! ist zur Kompilierzeit als Factorial<N>::value verfügbar durch erzeugen eines Objekts der Klasse: Factorial <12 > a; // ergibt 12! Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

70 Template Meta Programming Weiteres Beispiel: Fibonacci-Zahlen Das folgende Listing zeigt ein Programm, dass die Fibonacci-Zahlen zur Compile-Zeit und zur Laufzeit auswertet und die Zeiten misst: 1 // fibonacci.cc: 2 // Compute fibonacci numbers at run- and compile time and compare 3 // the time used for it. 4 # include <iostream > 5 # include <cstdio > 6 7 // rekursive runtime variant 8 unsigned long Fibonacci_Simple ( unsigned long n) 9 { 10 if (n ==0) return 0; 11 else if (n ==1) return 1; 12 else 13 return Fibonacci_Simple (n -1) + Fibonacci_Simple (n -2) ; 14 }; // rekursive template instantiations 17 template < unsigned long N> 18 class Fibonacci 19 { 20 public : 21 enum { value = Fibonacci <N -1 >:: value + 22 Fibonacci <N -2 >:: value }; 23 }; Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

71 Template Meta Programming Weiteres Beispiel: Fibonacci-Zahlen Das folgende Listing zeigt ein Programm, dass die Fibonacci-Zahlen zur Compile-Zeit und zur Laufzeit auswertet und die Zeiten misst: 25 // template specializations to abort iterative template instanciation 26 template <> 27 class Fibonacci <1 > { 28 public : 29 enum { value = 1 }; 30 }; template <> 33 class Fibonacci <0 > { 34 public : 35 enum { value = 0 }; 36 }; // main program 39 int main () 40 { 41 // call of recursive Fibonacci 42 clock_t begin_rec = clock (); 43 unsigned long result = Fibonacci_Simple (45) ; 44 clock_t end_rec = clock (); 45 printf (" Recursive Fib (40) = % ld computed in % lf secs.\ n", 46 result, ( double )( end_rec - begin_rec )/ CLOCKS_PER_SEC ); Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

72 Template Meta Programming Weiteres Beispiel: Fibonacci-Zahlen Das folgende Listing zeigt ein Programm, dass die Fibonacci-Zahlen zur Compile-Zeit und zur Laufzeit auswertet und die Zeiten misst: // call of templated Fibonacci 49 begin_rec = clock (); 50 result = Fibonacci <45 >:: value ; 51 end_rec = clock (); 52 printf (" Templated Fib (40) = % ld computed in % lf secs.\ n", 53 result, ( double )( end_rec - begin_rec )/ CLOCKS_PER_SEC ); return 0; 56 } Zeiten bei mir für n = 45: Rekursive Funktion: 31 s, Templates : 0 s (klar :-)). Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

73 Template Meta Programming Template Meta Programming Wofür brauchen wir Template Meta Programme? TMP generieren spezialisierte Algorithmen für kleine Klassen Beispiele: komplexe Zahlen, Tensoren, Gitter,... Idee: Hybrider Ansatz, also eine Zerlegung des Programms in ein TMP, läuft zur Kompilier-Zeit ein normales Programm Laufzeit-Verbesserungen (etwa durch durch massives Inlining) Generische Programmierung und TMP werden fast immer dann verwendet, wenn eine Bibliothek gleichzeitig: performant und flexibel sein soll! Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

74 Weiterführende Literatur Weiterführende Literatur Es existiert eine Vielzahl Literatur zu den ausschnittsweise vorgestellten Optimierungsmöglichkeiten durch die vorgestellten Techniken (insb. Statischer Polymorphismus). Literatur zu Scientific Computing with C++ N. Josuttis: C++ Templates The Complete Guide T. Veldhuizen: Techniques for Scientific C++ T. Veldhuizen: Template Metaprogramming E. Unruh: Prime Number Computation (historisches Beispiel für Template Meta Programming) Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen 24. Oktober / 63

C++ für Wissenschaftliches Rechnen

C++ für Wissenschaftliches Rechnen C++ für Wissenschaftliches Rechnen Dan Popović Interdisziplinäres Institut für Wissenschaftliches Rechnen, Universät Heidelberg 24. April 2012 Dan Popović (IWR, Heidelberg) C++ für Wissenschaftliches Rechnen

Mehr

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

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

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

DAP2-Programmierpraktikum Einführung in C++ (Teil 1) DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

Objektorientierte Programmierung mit C++ Vector und List

Objektorientierte Programmierung mit C++ Vector und List Vector und List Ziel, Inhalt Wir lernen die Klassen vector und list aus der Standard-C++ Library kennen und anwenden. In einer Übung wenden wir diese Klassen an um einen Medienshop (CD s und Bücher) zu

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

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

Einführung in die STL anhand eines ausgewählten Beispiels Einführung in die STL anhand eines ausgewählten Beispiels Frank M. Thiesing http://home.t-online.de/home/ frank.thiesing/stl/stl-folien.pdf Inhalt Überblick über die C++ STL Container Iteratoren Algorithmen

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

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

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Kurs Teil 1 "hello world" Vergleich von C++ und Java Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Spezialitäten Schlüsselwort 'const', Copy Constructor,

Mehr

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

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT Architektur Übersicht (allgemeine) OOP in C++ Polymorphie Virtuelle Funktionen Kompilieren Linken dynamische/statische Bibliotheken Tutorial: vs2008+ogre+(campus modell) Architektur (allgemeine) OOP in

Mehr

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

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente

Mehr

RO-Tutorien 3 / 6 / 12

RO-Tutorien 3 / 6 / 12 RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Teil 1: Wiederholung C Heutige Agenda Nutzereingaben verarbeiten Teil 2: Grundlagen in C++ Erstes

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

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

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt

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 10. Juli 2007 Fortgeschrittene Template-Techniken C++ bietet eine Vielfalt weiterer Techniken für Templates: Templates

Mehr

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015 Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

1. Übung zu "Numerik partieller Differentialgleichungen"

1. Übung zu Numerik partieller Differentialgleichungen 1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:

Mehr

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012) 13. Vererbung Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012) Vererbung Konzept Protected Section Virtuelle Mitgliedsfunktionen Verwendung von Vererbung Vererbung Vererbung ist ein Mechanismus,

Mehr

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Grundzüge der Programmierung. Wiederverwendung VERERBUNG Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse

Mehr

Zusammenfassung des Handzettels für Programmieren in C

Zusammenfassung des Handzettels für Programmieren in C Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.

Mehr

C++-Zusammenfassung. H. Schaudt. August 18, 2005

C++-Zusammenfassung. H. Schaudt. August 18, 2005 C++-Zusammenfassung H. Schaudt August 18, 2005 1 Datentypen 1.1 Grunddatentypen int (-32xxx bis +32xxx, implementerungs-abhängig) char -128 bis +128 float double bool (C++) int und char sind austauschbar:

Mehr

Elementare Datentypen in C++

Elementare Datentypen in C++ Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)

Mehr

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B. C-Crash-Kurs Eine kurze, keinesfalls erschöpfende Einführung in die Sprache C für Studierende, die eine strukturierte imperative Programmiersprache beherrschen. Die Vorstellung erfolgt am Beispiel von

Mehr

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04) 12. Vererbung Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Vererbung Konzept!Protected Section!Virtuelle Mitgliedsfunktionen!Verwendung von Vererbung Copyright: M. Gross, ETHZ, 2003 2 Vererbung!

Mehr

Die Programmiersprache C99: Zusammenfassung

Die Programmiersprache C99: Zusammenfassung Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach

Mehr

0. Einführung & Motivation

0. Einführung & Motivation 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

Mehr

Advanced Programming in C

Advanced Programming in C Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS2013/14 Inhalt Übung(Aufklärung) Vererbung(wdh.) Initilisierung bei Vererbung

Mehr

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg C vs. C++ Sebastian Meyer Universität Hamburg Proseminar C - Grundlagen und Konzepte 2013 1 / 31 Gliederung 1 Einführung 2 Vergleich der Spracheigenschaften 3 Neue Sprachelemente in C++ 4 Fazit 5 Zusammenfassung

Mehr

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04) 10. Klassen Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Objektorientierte Programmierung!Das Konzept der Klassen!Members!Objekte!Konstruktoren und Destruktoren!this-Pointer!Public und Private

Mehr

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen. Ziele sind das Arbeiten mit Funktionen und dem Aufzählungstyp (enum), sowie - einfache Verzweigung (if else) - Alternativen switch case - einfache Schleifen (while oder do while) Aufgabe 3: Diese Aufgabe

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

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

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek C++ - Funktionen und mehr Kerstin Gößner und Ralf Wondratschek Übersicht Deklaration, Definition und Initialisierung Variablen- und Konstantendeklaration Funktionsaufrufe und rückgabewerte Technische Grundlage

Mehr

Kurze Einführung in die Programmiersprache C++ und in Root

Kurze Einführung in die Programmiersprache C++ und in Root Kurze Einführung in die Programmiersprache C++ und in Root Statistik, Datenanalyse und Simulation; 31.10.2006 Inhalt 1 Einführung in die Programmiersprache C++ Allgemeines Variablen Funktionen 2 1 Einführung

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

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

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

Codingstandard. Softwareentwicklung Praktikum Stand: 27.02.2008

Codingstandard. Softwareentwicklung Praktikum Stand: 27.02.2008 I. Einleitung II. Codingstandard Softwareentwicklung Praktikum Stand: 27.02.2008 Wie in der Vorlesung schon ausgeführt wurde, ist die Lesbarkeit und Wartbarkeit des Sourcecodes ein sehr wichtiges Kriterium

Mehr

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung K05 Vererbung & Polymorphie in C++ 1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung 2 Vererbung in C++: Grundlagen Analog zu Java unterstützt C++ das Konzept der Vererbung:

Mehr

Die Programmiersprache C Eine Einführung

Die Programmiersprache C Eine Einführung Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert

Mehr

C++ - Eine Ubersicht fur Java-Programmierer

C++ - Eine Ubersicht fur Java-Programmierer C++ - Eine Ubersicht fur Java-Programmierer Daniel Wasserrab Lehrstuhl fur Programmierparadigmen Universitat Karlsruhe 23. April 2008 C++ I Entwickelt Anfang der 80er von Bjarne Stroustrup I Beeinut von

Mehr

Überladen von Operatoren

Überladen von Operatoren - Überladen des Indexoperators [] - Überladen des Ausgabeoperators > Programmieren in C++ Informatik FH Trier C++12-1 ähnlich dem Überladen von Funktionen Überladen

Mehr

AuD-Tafelübung T-B5b

AuD-Tafelübung T-B5b 6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit

Mehr

Klausurvorbereitung Lösung

Klausurvorbereitung Lösung Ausgabe 1 a) unsigned char erzeuge_bitmuster() static int z=0; int rest; unsigned char bm; rest = z % 4; z=z+1; switch (rest) case 0: bm = 0x00; break; case 1: bm = 0x11; break; case 2: bm = 0x33; break;

Mehr

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany C++ Programmierung Uwe Naumann LuFG Informatik 12, RWTH Aachen University, Germany Leave me alone world... Hauptprogramm int main(); return 0; Ausgabe auf Bildschrim #include std :: cout

Mehr

Der C++ Crashkurs v1.0

Der C++ Crashkurs v1.0 Der C++ Crashkurs v1.0 Daniel Stöckel, M. Sc. October 14, 2013 1 Grundlegendes 1.1 Das erste Programm Wir beginnen mit einem einfachen Hello world Programm. Listing 1: hello world.cpp // Einbinden der

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer

Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer Was Sie erwartet: Modernes C++ anwenden o ISO 14882 ist Norm für C++! o kein schlechteres Java, sondern mächtiger Moderne Standardbibliotheken anwenden

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

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 2006/07 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

11.3 Virtuelle Methoden

11.3 Virtuelle Methoden 11.3 Virtuelle Methoden Überdeckte Methoden: Betrachten wir noch einmal unsere Klassen Employee und Manager. class Employee void print() const cout

Mehr

In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch

In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch Kapitel Matrizen in C++ In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch 1 const int n=10; 3 double a[n][n]; gegeben. Allerdings gibt es bei dieser Methode eine Reihe

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

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

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0 Objects First With Java A Practical Introduction Using BlueJ Mehr über Vererbung Exploring polymorphism 1.0 Zentrale Konzepte dieses Kapitels Methoden-Polymorphie statischer und dynamischer Typ Überschreiben

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

Praktikum Betriebssysteme 1. Aufgabe (1)

Praktikum Betriebssysteme 1. Aufgabe (1) FG TECHNISCHE INFORMATIK U BS 041 01 TH 09 Praktikum Betriebssysteme 1. Aufgabe (1) Es wird ein unter LINUX lauffähiges C++-Programm ptab, mit dem Informationen über die Partitionierung von Festplatten

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

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Übersicht. Vorstellung des OO-Paradigmas

Übersicht. Vorstellung des OO-Paradigmas Java, OO und UML Vorstellung des OO-Paradigmas Übersicht Umsetzung des OO-Paradigmas in Java Einführung (seeeeeehr rudimenter) in UML zur graphischen Darstellung von OO Grammatik und Semantik von Java

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2009/0 : Technik vs. Iteration Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund 2 Definition (einfache,

Mehr

Abend 7 Vererbung und Polymorphie, Abstrakte Klassen

Abend 7 Vererbung und Polymorphie, Abstrakte Klassen Abend 7 Vererbung und Polymorphie, Abstrakte Klassen Ziel, Inhalt Wir sehen heute weitere Beispiele für Polymorphie und virtuelle Methoden. Wir lernen auch Klassen kennen, von denen man keine Objekte erzeugen

Mehr

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung: Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang

Mehr

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Wozu objektorientiertes Programmieren? Die Welt besteht für den Menschen

Mehr

Hydroinformatik I: Hello World

Hydroinformatik I: Hello World Hydroinformatik I: Hello World Prof. Dr.-Ing. habil. Olaf Kolditz 1 Helmholtz Centre for Environmental Research UFZ, Leipzig 2 Technische Universität Dresden TUD, Dresden Dresden, 28. Oktober 2016 1/15

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen Objektorientierte Programmierung mit Grundlagen 27.10.2008 1 Übersicht 27.10.2008 2 1 Übersicht Klassen und Objekte in - Klassen - Objekte - Klassen - Objekte 27.10.2008 3 Übersicht 27.10.2008 4 2 Einführung

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

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

Ulla Kirch Peter Prinz C+ + Lernen und professionell anwenden. mitp

Ulla Kirch Peter Prinz C+ + Lernen und professionell anwenden. mitp Ulla Kirch Peter Prinz C+ + Lernen und professionell anwenden mitp Inhaltsverzeichnis Einleitung 19 Grundlagen 21 Entwicklung und Eigenschaften von C++ 22 Objektorientierte Programmierung 24 Erstellen

Mehr

Grundlagen der Programmierung in C Funktionen

Grundlagen der Programmierung in C Funktionen Der erste Mechanismus für Code-Reuse! Grundlagen der Programmierung in C Funktionen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Ältester Mechanismus für Code-Reuse:

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 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen 1 C-Schlüsselwörter Schlüsselwörter sind in allen Programmiersprachen reservierte Wörter. In C sind auch alle Namen _[A-Z]... und... reserviert, auch _... bereichsweise. Weiterhin durch die Standard-

Mehr

Erste Schritte der Programmierung in C

Erste Schritte der Programmierung in C Erste Schritte der Programmierung in C C versus C++ Anatomie von C-Programmen für AVR- Mikrocontroller Unterschiede zwischen C++ und C 1 Grundlegende Unterschiede File-Extensions (Header und Quellcode)

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Stefan Brass: OOP (Java), 15. Überladene Methoden 1/22 Objektorientierte Programmierung Kapitel 15: Überladene Methoden Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14 http://www.informatik.uni-halle.de/

Mehr

Einführung in C++ mit Microsoft VS

Einführung in C++ mit Microsoft VS Einführung in C++ mit Microsoft VS Gliederung Allgemeines zu C++ und Unterschiede zu Java Header-Files Zeiger/Strukturen Namespaces Programmierstil Einführung in Microsoft VS Projekte und Solutions Debugger

Mehr

Programmieren in C++ Arrays, Strings und Zeigerarithmetik

Programmieren in C++ Arrays, Strings und Zeigerarithmetik Programmieren in C++ Arrays, Strings und Zeigerarithmetik Inhalt Eindimensionale C-Arrays C-Strings und Strings (Mehrdimensionale C-Arrays) Arrays und Vektoren (C++) Unique Pointers (C++11) Zeigerarithmetik

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 4-1 Übung 1) Schreiben Sie ein Programm, das die Fläche unter einer Parabel, also das Integral

Mehr

Javakurs 2013 Objektorientierung

Javakurs 2013 Objektorientierung Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4 Inhaltsverzeichnis TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA... 1 1 GRUNDLAGEN DER PROGRAMMIERUNG... 4 1.1 Das erste Java-Programm... 4 1.2 Programme und ihre Abläufe... 6 1.3 Entwurf mit Nassi-Shneiderman-Diagrammen...

Mehr

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

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ 1 Einleitung Vorteile von Java: gut strukturiert mit hohem Funktionsumfang (mächtige Standardbibliothek) weitestgehend

Mehr

Klausur zu Objektorientierter Softwareentwicklung in C++ 4. Februar 2003 (WS 2002/2003) Beispiellösung

Klausur zu Objektorientierter Softwareentwicklung in C++ 4. Februar 2003 (WS 2002/2003) Beispiellösung Klausur zu Objektorientierter Softwareentwicklung in C++ 4. Februar 2003 (WS 2002/2003) Beispiellösung Bearbeitungszeit: 120 Minuten NICHT MIT BLEISTIFT SCHREIBEN!!! Name: Vorname: Matrikelnummer: Aufgabe

Mehr

Prof. W. Henrich Seite 1

Prof. W. Henrich Seite 1 Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse

Mehr