Dynamische Datentypen

Größe: px
Ab Seite anzeigen:

Download "Dynamische Datentypen"

Transkript

1 Dynamische Datentypen

2 Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel

3 Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel o Heute: o Typ mit Wertebereich T k Werte sind k-folgen

4 Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel o Heute: o Typ mit Wertebereich T k Werte sind k-folgen o Typ mit Wertebereich T * Werte sind alle Folgen

5 Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel o Heute: o Typ mit Wertebereich T k Werte sind k-folgen o Typ mit Wertebereich T * Werte sind alle Folgen Speicherbedarf eines Wertes ist bei Kompilierung nicht notwendigerweise bekannt: Konzept dynamischer Speicher

6 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen

7 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen

8 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen Streiche alle echten Vielfachen von 2

9 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen Streiche alle echten Vielfachen von 2

10 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen Streiche alle echten Vielfachen von 2 und gehe zur nächsten Zahl

11 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen Streiche alle echten Vielfachen von 3

12 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen Streiche alle echten Vielfachen von 3

13 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen Streiche alle echten Vielfachen von 3 und gehe zur nächsten Zahl

14 Felder Das Sieb des Eratosthenes o berechnet alle Primzahlen in [2,n) o Methode: Ausstreichen der Nicht- Primzahlen Am Ende des Streichungsprozesses bleiben genau die Primzahlen übrig!

15 Felder: Implementierung Sieb des Eratosthenes int main() { // specification of n const unsigned int n = 1000; Primzahlen < n // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] bool crossed_out[n]; for (unsigned int i = 0; i < n; ++i) crossed_out[i] = false; // computation and output std::cout << "Prime numbers in [0," << n << "): "; for (unsigned int i = 2; i < n; ++i) if (!crossed_out[i]) { // i is prime std::cout << i << " "; // cross out all proper multiples of i for (unsigned int m = 2*i; m < n; m += i) crossed_out[m] = true; } std::cout << "\n"; } return 0;

16 Felder: Implementierung Sieb des Eratosthenes int main() { // specification of n const unsigned int n = 1000; // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] bool crossed_out[n]; for (unsigned int i = 0; i < n; ++i) crossed_out[i] = false; // computation and output std::cout << "Prime numbers in [0," << n << "): "; for (unsigned int i = 2; i < n; ++i) if (!crossed_out[i]) { // i is prime std::cout << i << " "; // cross out all proper multiples of i for (unsigned int m = 2*i; m < n; m += i) crossed_out[m] = true; } std::cout << "\n"; Liste: crossed_out[i] gibt an, ob i schon ausgestrichen wurde } return 0;

17 Felder: Implementierung Sieb des Eratosthenes int main() { // specification of n const unsigned int n = 1000; // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] bool crossed_out[n]; for (unsigned int i = 0; i < n; ++i) crossed_out[i] = false; // computation and output std::cout << "Prime numbers in [0," << n << "): "; for (unsigned int i = 2; i < n; ++i) if (!crossed_out[i]) { // i is prime std::cout << i << " "; // cross out all proper multiples of i for (unsigned int m = 2*i; m < n; m += i) crossed_out[m] = true; } std::cout << "\n"; Das Sieb: gehe zur jeweils nächsten nichtgestrichenen Zahl (diese ist Primzahl) und streiche alle echten Vielfachen aus } return 0;

18 Felder: Definition Deklaration eines Feldes (array): T a [expr ] konstanter Ausdruck, dessen Wert die Länge des Feldes angibt. neue Variable des Feld-Typs zugrundeliegender Typ

19 Felder: Definition Deklaration eines Feldes (array): T a [expr ] Wert k ist bei Kompilierung bekannt konstanter Ausdruck, dessen Wert die Länge des Feldes angibt. neue Variable des Feld-Typs zugrundeliegender Typ Mögliche Werte von a : T k

20 Felder variabler Länge? Flexibler wäre: int main() { // input of n std::cout << Compute prime numbers in [2, n) for n =? ; unsigned int n; std::cin >> n; } // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] bool crossed_out[n];...

21 Felder variabler Länge? Flexibler wäre: int main() { // input of n std::cout << Compute prime numbers in [2, n) for n =? ; unsigned int n; std::cin >> n; } // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] bool crossed_out[n];... Das geht auch, aber nicht so!

22 Felder: Speicherlayout o Ein Feld belegt einen zusammenhängenden Speicherbereich

23 Felder: Speicherlayout o Ein Feld belegt einen zusammenhängenden Speicherbereich Speicher für jeweils einen Wert von T

24 Felder: Speicherlayout o Ein Feld belegt einen zusammenhängenden Speicherbereich Beispiel: Feld mit 4 Elementen Speicher für jeweils einen Wert von T

25 Felder: Random Access Der L-Wert Typ T a [ i ] bezieht sich auf das i -te Element des Feldes a (Zählung beginnt bei 0)

26 Felder: Random Access Der L-Wert Typ T a [ i ] bezieht sich auf das i -te Element des Feldes a (Zählung beginnt bei 0) a[0] a[1] a[2] a[3]

27 Felder: Random Access o ist sehr effizient: p : Adresse von a s : Speicherbedarf von T

28 Felder: Random Access o ist sehr effizient: p : Adresse von a p + si : Adresse von a[i] s : Speicherbedarf von T a[i]

29 Felder sind speziell... o Man kann Felder nicht mit Feldern initialisieren (nur direkt)

30 Felder sind speziell... o Man kann Felder nicht mit Feldern initialisieren (nur direkt) int a[5] = {4,3,5,2,1}; // array of type int[5]

31 Felder sind speziell... o Man kann Felder nicht mit Feldern initialisieren (nur direkt) int a[] = {4,3,5,2,1}; // array of type int[5] Grösse kann weggelassen werden, da deduzierbar

32 Felder sind speziell... o Man kann Felder nicht mit Feldern initialisieren (nur direkt) int a[5] = {4,3,5,2,1}; // array of type int[5] int b[5] = a; // error: we cannot initialize from an array

33 Felder sind speziell... o Man kann Felder nicht mit Feldern initialisieren (nur direkt) int a[5] = {4,3,5,2,1}; // array of type int[5] int b[5] = a; // error: we cannot initialize from an array o Man kann Feldern keine Felder zuweisen int a[5] = {4,3,5,2,1}; // array of type int[5] int b[5]; b = a; // error: we cannot assign to an array

34 Felder sind speziell: warum? o Felder sind Erblast der Sprache C und aus heutiger Sicht primitiv

35 Felder sind speziell: warum? o Felder sind Erblast der Sprache C und aus heutiger Sicht primitiv o Ein Feld merkt sich die Anzahl seiner Elemente nicht! o o kein Problem bei Random Access, aber beim Initialisieren / Zuweisen ist dann nicht klar, wieviele Elemente kopiert werden müssen

36 Felder sind speziell: warum? o Felder sind Erblast der Sprache C und aus heutiger Sicht primitiv o Ein Feld merkt sich die Anzahl seiner Elemente nicht! o o kein Problem bei Random Access, aber beim Initialisieren / Zuweisen ist dann nicht klar, wieviele Elemente kopiert werden müssen int a[5] = {4,3,5,2,1}; int b[5]; b = a; // oops, how many elements do a and b have?

37 Felder sind speziell: warum? o Felder sind Erblast der Sprache C und aus heutiger Sicht primitiv o Ein Feld merkt sich die Anzahl seiner Elemente nicht! o o solange legale Indizes verwendet werden! kein Problem bei Random Access, aber beim Initialisieren / Zuweisen ist dann nicht klar, wieviele Elemente kopiert werden müssen int a[5] = {4,3,5,2,1}; int b[5]; b = a; // oops, how many elements do a and b have?

38 Felder sind trotzdem nützlich o als extrem effiziente Container für viele Daten des gleichen Typs o als Basis für nicht-primitive Felder variabler Länge, die man dann auch kopieren und zuweisen kann (Realisierung mit Klassenkonzept)

39 Felder als Funktionsparameter // PRE: a has size n or larger, n > 0 // POST: computes the maximum of the numbers // a[0],...,a[n-1]. int max_n (const int a[], int n) { int max = a[0]; for (int i = 1; i < n; ++i) if (a[i] > max) max = a[i]; return max; }

40 Felder als Funktionsparameter // PRE: a has size n or larger, n > 0 // POST: computes the maximum of the numbers // a[0],...,a[n-1]. int max_n (const int a[], int n) { } int max = a[0]; for (int i = 1; i < n; ++i) if (a[i] > max) max = a[i]; return max; Wie wird der formale Parameter mit dem Aufrufparameter initialisiert, wenn dies für Felder nicht geht?

41 Felder als Funktionsparameter // PRE: a has size n or larger, n > 0 // POST: computes the maximum of the numbers // a[0],...,a[n-1]. int max_n (const int a[], int n) { } int max = a[0]; for (int i = 1; i < n; ++i) if (a[i] > max) max = a[i]; return max; Antwort: Bei der Initialisierung wird nur die Adresse des Feldes kopiert (wie bei Referenz-Parametern), aber explizit als Zeiger.

42 Zeiger-Typen T * sprich: Zeiger auf T zugrundeliegender Typ o T * hat als mögliche Werte Adressen von Objekten des Typs T

43 Feld-nach-Zeiger-Konversion o Es gibt keine formalen Parameter von Feld-Typ T []; dieser Typ wird vom Compiler auf T * angepasst o Bei Aufrufparameter vom Feld-Typ T [] wird der formale Parameter mit der Adresse des ersten Elements des Feldes initialisiert

44 Feld-nach-Zeiger-Konversion // PRE: a has size n or larger, n > 0 // POST: computes the maximum of the numbers // a[0],...,a[n-1]. int max_n (const int a[], int n) { int max = a[0]; for (int i = 1; i < n; ++i) if (a[i] > max) max = a[i]; return max; } gibt s eigentlich gar nicht, wird angepasst

45 Feld-nach-Zeiger-Konversion // PRE: a has size n or larger, n > 0 // POST: computes the maximum of the numbers // a[0],...,a[n-1]. int max_n (const int* a, int n) { int max = a[0]; for (int i = 1; i < n; ++i) if (a[i] > max) max = a[i]; return max; } passender Zeiger-Typ const int*

46 Feld-nach-Zeiger-Konversion // PRE: a has size n or larger, n > 0 // POST: computes the maximum of the numbers // a[0],...,a[n-1]. int max_n (const int* a, int n) { int max = a[0]; for (int i = 1; i < n; ++i) if (a[i] > max) max = a[i]; return max; } gibt s eigentlich gar nicht, wird angepasst auf passenden Zeiger-Typ const int* Aber was heisst das für Zeiger?

47 Zeiger-Arithmetik Man kann mit Adressen rechnen: o s = Speicherbedarf für Wert von T o ptr = Zeiger vom Typ T * mit Wert p

48 Zeiger-Arithmetik Man kann mit Adressen rechnen: o s = Speicherbedarf für Wert von T o ptr = Zeiger vom Typ T * mit Wert p o ptr + expr hat Wert p + s i Typ int, Wert i Adresse des Objektes i Speicherplätze weiter rechts

49 Zeiger-Arithmetik Man kann mit Adressen rechnen: o s = Speicherbedarf für Wert von T o ptr = Zeiger vom Typ T * mit Wert p o ptr [expr ]: Objekt an Adresse p + s i Typ int, Wert i Adresse des Objektes i Speicherplätze weiter rechts

50 Zeiger-Arithmetik // PRE: a has size n or larger, n > 0 // POST: computes the maximum of the numbers // a[0],...,a[n-1]. int max_n (const int* a, int n) { int max = a[0]; for (int i = 1; i < n; ++i) if (a[i] > max) max = a[i]; return max; } gleiche Semantik wie beim Feld!

51 Der Adressoperator o gibt die Adresse eines L-Wertes &expr R-Wert vom Typ T * &expr expr L-Wert vom Typ T

52 Der Dereferenzierungsoperator o gibt das Objekt hinter einer Adresse *expr L-Wert vom Typ T expr *expr R-Wert vom Typ T *

53 Der Dereferenzierungsoperator o gibt das Objekt hinter einer Adresse *expr L-Wert vom Typ T expr *expr R-Wert vom Typ T * *(&expr ) == expr

54 Dynamischer Speicher o wie besorgen wir Speicher, der bei Kompilierung nicht vorhersehbar ist?

55 Dynamischer Speicher o wie besorgen wir Speicher, der bei Kompilierung nicht vorhersehbar ist? o o Sieb des Eratosthenes mit Eingabe von n Allgemein: Feld nicht-konstanter Grösse

56 New und Delete new T Ausdruck vom Typ T * (Zeiger) new-operator

57 New und Delete new T Ausdruck vom Typ T * (Zeiger) new-operator o Semantik: neuer Speicher für ein Objekt vom Typ T wird angelegt; der Wert des Ausdrucks ist dessen Adresse

58 New und Delete new T [expr ] Ausdruck vom Typ T * (Zeiger) new-operator Typ int, Wert n ; expr nicht notwendigerweise konstant o Semantik: neuer Speicher für ein Feld der Länge n mit zugrundeliegendem Typ T wird angelegt; Wert des Ausdrucks ist Adresse des ersten Elements

59 New und Delete Mit new erzeugte Objekte haben dynamische Speicherdauer: sie leben, bis sie explizit gelöscht werden.

60 New und Delete Mit new erzeugte Objekte haben dynamische Speicherdauer: sie leben, bis sie explizit gelöscht werden: delete expr Typ void delete-operator Zeiger vom Typ T *, der auf ein vorher mit new erzeugtes Objekt verweist; Speicher wird wieder freigegeben.

61 New und Delete Mit new erzeugte Objekte haben dynamische Speicherdauer: sie leben, bis sie explizit gelöscht werden. delete[] expr Typ void delete-operator Zeiger vom Typ T *, der auf ein vorher mit new erzeugtes Feld verweist; Speicher wird wieder freigegeben.

62 Sieb des Eratosthenes: Erste dynamische Version int main() { // input of n std::cout << Compute prime numbers in [2, n) for n =? ; unsigned int n; std::cin >> n; } // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] bool* crossed_out = new bool[n]; delete[] crossed_out; return 0; Berechnungen wie vorher

63 Probleme mit new / delete o delete kann leicht vergessen werden (Speicherleck; kann auf Dauer zu Speicherüberlauf führen)

64 Probleme mit new / delete o delete kann leicht vergessen werden (Speicherleck; kann auf Dauer zu Speicherüberlauf führen) o Initialisierung und Zuweisung von Feldern sind weiterhin nicht möglich

65 Probleme mit new / delete o delete kann leicht vergessen werden (Speicherleck; kann auf Dauer zu Speicherüberlauf führen) o Initialisierung und Zuweisung von Feldern sind weiterhin nicht möglich Lösung mit eigener Feld-Klasse

66 Eine Klasse für Felder: Daten- Mitglieder und Konstruktor class array { public: typedef bool T; // nested type, easy to change // --- Constructor from int // PRE: n >= 0 // POST: *this is initialized with an array of length n array (int n) : ptr (new T[n]), size (n) {} private: T* ptr; // pointer to first element int size; // number of elements };

67 Eine Klasse für Felder: Random Access o Indexzugriff mittels Überladung von operator[](als Mitglieds-Funktion)

68 Eine Klasse für Felder: Random Access o Indexzugriff mittels Überladung von operator[](als Mitglieds-Funktion) // --- Index operator (const) // PRE: the array has length at least i // POST: return value is i-th element (as a copy) const T& operator[] (int i) const { return ptr[i]; }

69 Eine Klasse für Felder: Random Access o Indexzugriff mittels Überladung von operator[](als Mitglieds-Funktion) // --- Index operator (const) // PRE: the array has length at least i // POST: return value is i-th element (as a copy) const T& operator[] (int i) const { } return ptr[i]; Problem: erlaubt keinen schreibenden Zugriff wie in crossed_out[i] = false;

70 Eine Klasse für Felder: Random Access o Zwei Überladungen von operator[]! // --- Index operator (const) // PRE: the array has length at least i // POST: return value is i-th element (as a copy) const T& operator[] (int i) const { return ptr[i]; } // --- Index operator (non-const) // PRE: the array has length at least i // POST: return value is i-th element (as a reference) T& operator[] (int i) { return ptr[i]; }

71 Eine Klasse für Felder: Sieb des Eratosthenes int main() { // input of n std::cout << Compute prime numbers in [2, n) for n =? ; unsigned int n; std::cin >> n; // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] bool* crossed_out = new bool[n]; delete[] crossed_out; return 0; } Bisher

72 Eine Klasse für Felder: Sieb des Eratosthenes int main() { // input of n std::cout << Compute prime numbers in [2, n) for n =? ; unsigned int n; std::cin >> n; // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] array crossed_out (n); // constructor call delete[] crossed_out; return 0; } Neu

73 Eine Klasse für Felder: Sieb des Eratosthenes int main() { // input of n std::cout << Compute prime numbers in [2, n) for n =? ; unsigned int n; std::cin >> n; } // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] array crossed_out (n); // constructor call delete[] crossed_out; return 0; Fehler: crossed_out ist kein Standard-Feld, delete ist nicht verfügbar!

74 Eine Klasse für Felder: Sieb des Eratosthenes int main() { // input of n std::cout << Compute prime numbers in [2, n) for n =? ; unsigned int n; std::cin >> n; } // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] array crossed_out (n); // constructor call return 0; delete weglassen geht, aber dann entsteht ein Speicherleck

75 Eine Klasse für Felder: Sieb des Eratosthenes int main() { // input of n std::cout << Compute prime numbers in [2, n) for n =? ; unsigned int n; std::cin >> n; // definition and initialization: provides us with // Booleans crossed_out[0],..., crossed_out[n-1] array crossed_out (n); // constructor call } return 0; Diese Variable hat automatische Speicherdauer; dynamischer Speicher sollte mit der Variable automatisch verschwinden!

76 Eine Klasse für Felder: Der Destruktor o spezielle Mitglieds-Funktion (Anti-Konstruktor), die automatisch für jedes freizugebende Klassen-Objekt aufgerufen wird

77 Eine Klasse für Felder: Der Destruktor o spezielle Mitglieds-Funktion (Anti-Konstruktor), die automatisch für jedes freizugebende Klassen-Objekt aufgerufen wird // --- Destructor ~array () { delete[] ptr; } Destruktorname: ~T (keine Parameter)

78 Probleme mit new / delete o delete kann leicht vergessen werden (Speicherleck; kann auf Dauer zu Speicherüberlauf führen) ok! o Initialisierung und Zuweisung von Feldern sind weiterhin nicht möglich Lösung mit eigener Feld-Klasse

79 Probleme mit new / delete o delete kann leicht vergessen werden (Speicherleck; kann auf Dauer zu Speicherüberlauf führen) ok! o Initialisierung und Zuweisung von Feldern sind weiterhin nicht möglich Lösung mit eigener Feld-Klasse

80 Eine Klasse für Felder: Der Copy-Konstruktor o...der Klasse T ist der eindeutige Konstruktor mit Deklaration T (const T& x);

81 Eine Klasse für Felder: Der Copy-Konstruktor o...der Klasse T ist der eindeutige Konstruktor mit Deklaration T (const T& x); o wird automatisch aufgerufen, wenn Werte vom Typ T mit Werten vom Typ T initialisiert werden

82 Eine Klasse für Felder: Der Copy-Konstruktor o...der Klasse T ist der eindeutige Konstruktor mit Deklaration T (const T& x); o wird automatisch aufgerufen, wenn Werte vom Typ T mit Werten vom Typ T initialisiert werden o T x = t; // t vom Typ T

83 Eine Klasse für Felder: Der Copy-Konstruktor o...der Klasse T ist der eindeutige Konstruktor mit Deklaration T (const T& x); o wird automatisch aufgerufen, wenn Werte vom Typ T mit Werten vom Typ T initialisiert werden o T x (t); // t vom Typ T

84 Eine Klasse für Felder: Der Copy-Konstruktor o...der Klasse T ist der eindeutige Konstruktor mit Deklaration T (const T& x); o wird automatisch aufgerufen, wenn Werte vom Typ T mit Werten vom Typ T initialisiert werden o Initialisierung von formalen Funktionsparametern und Rückgabewerten

85 Eine Klasse für Felder: Der Copy-Konstruktor // --- Copy Constructor // POST: *this is initialized from a array (const array& a) : ptr (new T[a.size]), size (a.size) { // now copy the elements of a into *this for (int i = 0; i < size; ++i) ptr[i] = a[i]; }

86 Eine Klasse für Felder: Der Copy-Konstruktor // --- Copy Constructor // POST: *this is initialized from a array (const array& a) { } : ptr (new T[a.size]), size (a.size) // now copy the elements of a into *this for (int i = 0; i < size; ++i) ptr[i] = a[i]; Warum ist const array& a hier zwingend notwendig, während array a nicht geht?

87 Eine Klasse für Felder: Der Copy-Konstruktor // --- Copy Constructor // POST: *this is initialized from a array (const array& a) { } : ptr (new T[a.size]), size (a.size) // now copy the elements of a into *this for (int i = 0; i < size; ++i) ptr[i] = a[i]; Aufruf eines Copy-Konstruktors mit Deklaration array (array a); müsste den Copy- Konstruktor aufrufen (Initialisierung des formalen Parameters!); unendliche Rekursion!

88 Eine Klasse für Felder: Der Copy-Konstruktor o Falls kein Copy-Konstruktor deklariert ist, so wird er automatisch erzeugt (und initialisiert mitgliedsweise)

89 Eine Klasse für Felder: Der Copy-Konstruktor o Falls kein Copy-Konstruktor deklariert ist, so wird er automatisch erzeugt (und initialisiert mitgliedsweise) Das ist für unsere Klasse array nicht das, was wir wollen (es wird nur der Zeiger ptr kopiert, nicht jedoch das dahinterliegende Feld wir erhalten Alias-Semantik)!

90 Eine Klasse für Felder: Der Copy-Konstruktor Nun können wir zum Beispiel schreiben: array a(3); a[0] = true; a[1] = false; a[2] = false; // a == {true, false, false} array b(a); // b == {true, false, false} b[2] = true; // b == {true, false, true}

91 Eine Klasse für Felder: Der Copy-Konstruktor Nun können wir zum Beispiel schreiben: array a(3); a[0] = true; a[1] = false; a[2] = false; // a == {true, false, false} Initialisierung von b durch a array b(a); // b == {true, false, false} b[2] = true; // b == {true, false, true}

92 Eine Klasse für Felder: Der Zuweisungsoperator o Überladung von operator= als Mitglieds-Funktion

93 Eine Klasse für Felder: Der Zuweisungsoperator o Überladung von operator= als Mitglieds-Funktion o ähnlich wie Copy-Konstruktor ohne Initialisierer, aber zusätzlich o o Freigabe des Speichers für den alten Wert Vermeidung von Selbstzuweisungen

94 Eine Klasse für Felder: Der Zuweisungsoperator array& operator= (const array& a) { // avoid self-assignments if (this!= &a) { // free old memory, and get new memory of // appropriate size delete[] ptr; ptr = new T[a.size]; // copy the elements of a into *this for (int i = 0; i < size; ++i) ptr[i] = a[i]; } return *this; }

95 Eine Klasse für Felder: Der Zuweisungsoperator array& operator= (const array& a) { // avoid self-assignments if (this!= &a) { // free old memory, and get new memory of // appropriate size delete[] ptr; ptr = new T[a.size]; // copy the elements of a into *this for (int i = 0; i < size; ++i) ptr[i] = a[i]; } return *this; } Test auf Selbstzuweisung ist wichtig, um versehentliches Löschen des zuzuweisenden Wertes zu vermeiden.

96 Eine Klasse für Felder: Der Zuweisungsoperator o Falls kein Zuweisungsoperator deklariert ist, so wird er automatisch erzeugt (und weist mitgliedsweise zu) Das ist für unsere Klasse array nicht das, was wir wollen (es wird nur der Zeiger ptr kopiert, nicht jedoch das dahinterliegende Feld wir erhalten Alias-Semantik)!

97 Eine Klasse für Felder: Der Zuweisungsoperator Nun können wir zum Beispiel schreiben: array a(3); a[0] = true; a[1] = false; a[2] = false; // a == {true, false, false} Zuweisung von b an a array b(2); b = a; // b == {true, false, false} b[2] = true; // b == {true, false, true}

98 Eine Klasse für Felder o o o array.h array.c Bibliothek eratosthenes2.c Anwendung

99 Dynamischer Datentyp o Typ, der dynamischen Speicher verwaltet (z.b. unsere Klasse für Felder)

100 Dynamischer Datentyp o Typ, der dynamischen Speicher verwaltet (z.b. unsere Klasse für Felder) o andere typische Anwendungen: o o o o Listen Stapel Bäume Graphen

101 Dynamischer Datentyp o sollte immer mindestens o o o o Konstruktoren Destruktor Copy-Konstruktor Zuweisungsoperator haben.

102 Vektoren

103 Vektoren o sind die Felder der Standardbibliothek

104 Vektoren o sind die Felder der Standardbibliothek o std::vector<t > für zugrundeliegenden Typ T

105 Vektoren o sind die Felder der Standardbibliothek o std::vector<t > für zugrundeliegenden Typ T o können noch mehr, z.b: o Elemente am Ende anhängen und löschen

106 Vektoren o sind die Felder der Standardbibliothek o std::vector<t > für zugrundeliegenden Typ T o können noch mehr, z.b: o Elemente am Ende anhängen und löschen o repräsentieren damit die Menge T * aller endlichen Folgen über T

107 Vektoren o sind die Felder der Standardbibliothek o std::vector<t > für zugrundeliegenden Typ T o können noch mehr, z.b: o Elemente am Ende anhängen und löschen o repräsentieren damit die Menge T * aller endlichen Folgen über T eratosthenes3.c

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

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

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18 C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen

Mehr

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

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache: Kapitel 8 Operatoren Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache: Operatoren definieren Es ist in C++ möglich, Operatoren wie +, oder für

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 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

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

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

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

Das erste C++ Programm

Das erste C++ Programm Das erste C++ Programm // Program: power8.c // Raise a number to the eighth power. #include int main() { // input std::cout > a; // computation int

Mehr

Programmier-Befehle - Woche 10

Programmier-Befehle - Woche 10 Funktionen Rekursion Selbstaufruf einer Funktion Jeder rekursive Funktionsaufruf hat seine eigenen, unabhängigen Variablen und Argumente. Dies kann man sich sehr gut anhand des in der Vorlesung gezeigten

Mehr

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa? C- Kurs 08 Dipl.- Inf. Jörn Hoffmann jhoffmann@informa?k.uni- leipzig.de Universität Leipzig Ins?tut für Informa?k Technische Informa?k Überblick Datentyp zur Verwaltung von Adressen (auf Speicherplätze)

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

Programmieren in C++ Überladen von Methoden und Operatoren

Programmieren in C++ Überladen von Methoden und Operatoren Programmieren in C++ Überladen von Methoden und Operatoren Inhalt Überladen von Methoden Überladen von Operatoren Implizite und explizite Konvertierungsoperatoren 7-2 Überladen von Methoden Signatur einer

Mehr

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

C++ Notnagel. Ziel, Inhalt. Programmieren in C++ C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt

Mehr

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen

Mehr

Programmierkurs C/C++

Programmierkurs C/C++ Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Freitag Sandro Andreotti andreott@inf.fu-berlin.de WS 2008/09 1 Blockkurs: "Einführung in C/C++" 2 Vererbung Klassen erben die Member von Basisklassen:

Mehr

Die Mersenne sche Vermutung. Einführung. Der Vortrag von Cole. Die Mersenne sche Vermutung

Die Mersenne sche Vermutung. Einführung. Der Vortrag von Cole. Die Mersenne sche Vermutung Die Mersenne sche Vermutung Einführung Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++-Programm Mersenne (1644): Die Zahlen der Form 2 n -1 sind Primzahlen

Mehr

C++ - Container und dynamische Speicherverwaltung

C++ - Container und dynamische Speicherverwaltung C++ - Container und dynamische Speicherverwaltung Reiner Nitsch r.nitsch@fbi.h-da.de Fall-Studie: Container mit Wachstum Nachteile von C-Arrays in C++ statischer Datentyp: Zur Laufzeit Größe nicht änderbar

Mehr

Praxisorientierte Einführung in C++ Lektion: "Smart-Pointer"

Praxisorientierte Einführung in C++ Lektion: Smart-Pointer Praxisorientierte Einführung in C++ Lektion: "Smart-Pointer" Christof Elbrechter Neuroinformatics Group, CITEC June 26, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ June 26, 2014 1 / 17

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

Mehr

Grundlagen der Informatik 11. Zeiger

Grundlagen der Informatik 11. Zeiger 11. Zeiger Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte Grundlagen der Informatik (Alex Rempel) 1 Motivation Dynamische Speicherverwaltung Oft müssen große

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

Themen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren

Themen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren Themen Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren Statische Methoden Klassenmethoden Merkmal der Klasse nicht eines einzelnen Objekts

Mehr

Zeiger in C und C++ Zeiger in Java und C/C++

Zeiger in C und C++ Zeiger in Java und C/C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,

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

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen

Mehr

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Prüfung Informatik D-MATH/D-PHYS :00 11:00 Prüfung Informatik D-MATH/D-PHYS 24. 1. 2014 09:00 11:00 Prof. Bernd Gartner Kandidat/in: Name:... Vorname:... Stud.-Nr.:... Ich bezeuge mit meiner Unterschrift dass ich die Prufung unter regularen Bedingungen

Mehr

Zeiger: Der Adressoperator &

Zeiger: Der Adressoperator & Zeiger: Der Adressoperator & Variablen werden im Computer im Speicher abgelegt. Nach der Deklaration int a,b,c; double x,y,z; Sieht die Speicherbelegung etwa wie folgt aus: a b c x y z Jede Variable hat

Mehr

Java I Vorlesung 6 Referenz-Datentypen

Java I Vorlesung 6 Referenz-Datentypen Java I Vorlesung 6 Referenz-Datentypen 7.6.2004 Referenzen this, super und null Typkonvertierung von Referenztypen Finale Methoden und Klassen Datentypen in Java In Java gibt es zwei Arten von Datentypen:

Mehr

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

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1 Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1 Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Das C++ Typsystem simple structured integral enum

Mehr

Systemnahe Programmierung in C/C++

Systemnahe Programmierung in C/C++ Systemnahe Programmierung in C/C++ Peter Piehler peter.piehler@symetrion.com Lehrstuhl für Datenbanken und Informationssysteme Fakultät für Mathematik und Informatik 2006 12 13 Peter Piehler (DBIS) C/C++

Mehr

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Vorkurs Informatik WS 14/15 Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Tag 3: Objektorientiere Programmierung 8. Oktober 2014 Vorkurs Informatik WS 14/15 > Einführung Agenda 1 Einführung

Mehr

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen

Mehr

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Vorkurs Informatik WS 14/15 Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Arne Nägel, Andreas Vogel, Gabriel Wittum Lehrstuhl Modellierung und Simulation Goethe-Center for Scientific Computing

Mehr

Wertebereich und Genauigkeit der Zahlendarstellung

Wertebereich und Genauigkeit der Zahlendarstellung Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden

Mehr

DAP2 Praktikum Blatt 1

DAP2 Praktikum Blatt 1 Fakultät für Informatik Lehrstuhl 11 / Algorithm Engineering Prof. Dr. Petra Mutzel, Carsten Gutwenger Sommersemester 2009 DAP2 Praktikum Blatt 1 Ausgabe: 21. April Abgabe: 22. 24. April Kurzaufgabe 1.1

Mehr

5. Abgeleitete Datentypen

5. Abgeleitete Datentypen 5. Abgeleitete Datentypen Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Felder (Arrays)!Zeichenketten (Strings)!Strukturen (Structs) Copyright: M. Gross, ETHZ, 2003 2 Arrays! Ein Array ist

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 5 Referenzdatentypen - Felder... 5-2 5.1 Eindimensionale Felder - Vektoren... 5-3 5.1.1 Vereinbarung... 5-3 5.1.2 Referenzen sind keine Felder... 5-4 5.1.3 Kopieren eindimensionaler Felder... 5-6

Mehr

18. Vererbung und Polymorphie

18. Vererbung und Polymorphie 590 18. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume 591 -(3-(4-5))*(3+4*5)/6

Mehr

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Prüfung Informatik D-MATH/D-PHYS :00 11:00 Prüfung Informatik D-MATH/D-PHYS 25. 1. 2013 09:00 11:00 Dr. Bernd Gartner Kandidat/in: Name:... Vorname:... Stud.-Nr.:... Ich bezeuge mit meiner Unterschrift, dass ich die Prufung unter regularen Bedingungen

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

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

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

Einführung in die Programmierung

Einführung in die Programmierung : Klassen 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 Einführung Konstruktoren / Destruktoren

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

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer) Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Zeigern

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

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

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

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

Zeiger und dynamischer Speicher

Zeiger und dynamischer Speicher Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Zuletzt aktualisiert: 09.12.2013, 07:49 Uhr

Mehr

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!

Mehr

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

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen

Mehr

Relationen-Algebra und Persistenz Teil I

Relationen-Algebra und Persistenz Teil I Relationen-Algebra und Persistenz Teil I Implementierungskonzepte und Anforderungen an Attributdatentypen LG Datenbanksysteme für neue Anwendungen Inhalt FLOBs DBArrays Attributsdatentypen Folie 2 Bisher:

Mehr

Vektoren 105. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier

Vektoren 105. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier Vektoren 105 direct-declarator simple-declarator ( simple-declarator ) function-declarator array-declarator array-declarator direct-declarator [ [ array-qualifier-list ] [ array-size-expression ] ] array-qualifier-list

Mehr

1.4. Funktionen. Objektorientierte Programmierung mit C++

1.4. Funktionen. Objektorientierte Programmierung mit C++ mehrfache Deklarationen sind erlaubt für jede Funktion muss es (GENAU) eine Definition geben, ansonsten linker error [the one definition rule ODR] Deklarationen in *.h - Files, Definitionen in *.cpp -

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

Praxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung"

Praxisorientierte Einführung in C++ Lektion: Dynamische Speicherverwaltung Praxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung" Christof Elbrechter Neuroinformatics Group, CITEC May 15, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ May 15,

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

Speicher und Adressraum

Speicher und Adressraum Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode

Mehr

Speicherklassen (1) Lokale Variablen

Speicherklassen (1) Lokale Variablen Speicherklassen (1) Lokale Variablen Lokale Variablen beschränken sich auf die Funktionen, in denen sie definiert werden Sind in der Funktion gekapselt können also nur in der Funktion verändert werden

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

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Übung zur Vorlesung Programmieren in C

Übung zur Vorlesung Programmieren in C Übung zur Vorlesung Programmieren in C 6 Pointers Marvin Gülker Ruhruniversität Bochum Wintersemester 2015/2016 Marvin Gülker (Ruhruniversität Bochum) 6 Pointers Wintersemester 2015/2016 1 / 29 Gliederung

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

Mehr

Arrays (Felder/Vektoren)

Arrays (Felder/Vektoren) Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff

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

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

Technische Infor matik 2 C/C++-Kurs. Datenabstraktion (Klassen) 2005 AG Rechner netze 4.1

Technische Infor matik 2 C/C++-Kurs. Datenabstraktion (Klassen) 2005 AG Rechner netze 4.1 Technische Infor matik 2 C/C++-Kurs Datenabstraktion (Klassen) 2005 AG Rechner netze 4.1 Overloading Überladene Funktionen Auswahl einer Funktion anhand ihrer Signatur Signatur : Name + Parameter Rückgabe-Wer

Mehr

Praxis der Programmierung

Praxis der Programmierung Dynamische Datentypen Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Dynamische Datentypen 2 Dynamische Datentypen

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

Pointer. Variablen. Pointer. Ein elementares Beispiel. Pointer in C

Pointer. Variablen. Pointer. Ein elementares Beispiel. Pointer in C Variablen Pointer Variable vs. Pointer Dereferenzieren Address-of Operator & Dereference Operarot * Call by Reference Variable = symbolischer Name für Speicherbereich + Information, wie Speicherbereich

Mehr

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.

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

Klassen. Kapitel Klassendeklaration

Klassen. Kapitel Klassendeklaration Kapitel 4 Klassen Wir kommen nun zu einem sehr wichtigen Aspekt der OOT: zu den Klassen. Eine Klasse ist eine vom Benutzer definierte Datenstruktur, eine Sammlung von Variablen (unterschiedlichen Typs)

Mehr

Meeting C++ C++11 R-Value Referenzen

Meeting C++ C++11 R-Value Referenzen Meeting C++ Detlef Wilkening http://www.wilkening-online.de 09.11.2012 Inhalt Motivation L-Values und R-Values R-Value Referenzen Move Semantik std::move Funktionen mit R-Value-Referenz Parametern Fazit

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

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 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse

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

Kurzeinführung in C/C++ Elementare Datentypen in C++

Kurzeinführung in C/C++ Elementare Datentypen in C++ Elementare Datentypen in C++ Anders als in Java sind in C++ die Größen der Elementaren Datentypen maschinenabhängig Die Größe der Datentypen lässt sich mit sizeof ermitteln: int n=sizeof(int) In C++ gilt

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

Aufbau von Klassen. class punkt {...

Aufbau von Klassen. class punkt {... Einführung in C++ Aufbau von Klassen Eine wird mit dem Schlüsselwort class eingeleitet, und endet mit einem Semikolon. Der Inhalt wird zwischen geschweiften Klammern geschrieben. class punkt {... ; Im

Mehr

3. Wahrheitswerte. Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten

3. Wahrheitswerte. Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten 114 3. Wahrheitswerte Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten Wo wollen wir hin? 115 int a; std::cin >> a; if (a % 2 ==

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 16.04.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 39 Einführung Datentypen Operatoren Anweisungssyntax Algorithmen zur Datenanalyse in

Mehr

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

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen Grundlagen der Programmierung Prof. H. Mössenböck 10. Klassen Motivation Wie würde man ein Datum speichern (z.b. 13. November 2004)? 3 Variablen int da; String month; int ear; Unbequem, wenn man mehrere

Mehr

Klassendefinitionen verstehen

Klassendefinitionen verstehen Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen

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

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Organisatorisches Vorlesung Donnerstag 8:35 bis 10:05 Übung drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Tutorium (Mehr oder weniger) abwechselnd Mo und Mi 10-11:30 Termine

Mehr

Felder (1) Allgemeines

Felder (1) Allgemeines Felder (1) Allgemeines Gleichartige Daten, wie Tabelle von Zahlen, Datumswerten, Namen etc. Felder (engl. Array) stellen einen Verbundtyp dar, in dem mehrere Daten desselben Typs gespeichert werden Oft

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 11.06.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 28 Einführung Klassen Übung Algorithmen zur Datenanalyse in C++ Hartmut Stadie 2/ 28

Mehr

6. Zeiger Allgemeines Definition eines Zeigers

6. Zeiger Allgemeines Definition eines Zeigers 6. Zeiger www.c-programme.de Stefan Thiemert Kapitel 6 - Seite 1 von 6 6. 1. Allgemeines Zeiger spielen in der Programmierung eine wichtige Rolle. Sie sind wichtig, bei der Arbeit mit Arrays und Funktionen.

Mehr

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen 1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen II.2.2 Methoden, Unterprogramme und Parameter - 1 - 2. Methoden

Mehr

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

Strukturen & Math. Strukturen und Vektoren. Allokieren eines Vektors. Zugriff auf Strukturen. Freigeben eines Vektors Strukturen & Math Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen Strukturen und Vektoren 1 #ifndef _STRUCT_VECTOR_ 2 #define _STRUCT_VECTOR_ 3 4 #include 5 #include

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

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

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Vordefinierte Datentypen Übersicht 1 Ganzzahlige Typen 2 Boolscher Typ 3 Gleitkommatypen 4 Referenztypen 5 void Typ 6 Implizite und explizite Typumwandlungen Ganzzahlige Typen Die

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4

Mehr