Dynamische Datentypen
|
|
- Manuela Zimmermann
- vor 6 Jahren
- Abrufe
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 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
MehrC++ 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
MehrWas 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
MehrModellierung 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; {
MehrC++ 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
MehrProgrammierung 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
MehrVorkurs 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:
MehrDas 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
MehrProgrammier-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
MehrC- 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)
MehrProf. 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
MehrProgrammieren 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
MehrC++ 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 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
MehrProgrammierkurs 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:
MehrDie 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
MehrC++ - 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
MehrPraxisorientierte 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
MehrVorkurs C++ Programmierung
Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)
MehrGrundlagen 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
MehrEinfü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
MehrThemen. 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
MehrZeiger 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,
MehrAdvanced 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
MehrProgrammieren 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
MehrPrü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
MehrZeiger: 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
MehrJava 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:
MehrGrundlagen 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
MehrSystemnahe 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++
MehrVorkurs 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
MehrSchwerpunkte. 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
MehrVorkurs 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
MehrWertebereich 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
MehrDAP2 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
Mehr5. 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
MehrDr. 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
Mehr18. 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
MehrPrü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
MehrC++ 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
Mehr1. 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
MehrC++-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:
MehrEinfü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
MehrUnterlagen. 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
MehrInhalt. 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
MehrRepetitorium 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
MehrMethoden. 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
MehrEinstieg 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
MehrZusammenfassung 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.
MehrZeiger 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
MehrVariablen. 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!
MehrKapitel 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
MehrRelationen-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:
MehrVektoren 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
Mehr1.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 -
MehrBereits 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
MehrPraxisorientierte 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,
MehrBereits 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
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrSpeicherklassen (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
MehrErste 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)
Mehr2. 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 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
MehrUnterprogramme. 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
MehrEinfü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
MehrArrays (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
MehrFunktionen 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
Mehr7 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
MehrTechnische 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
MehrPraxis 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
MehrAuD-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
MehrPointer. 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
MehrGliederung. 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.
MehrKapitel 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
MehrKlassen. 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)
MehrMeeting 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
MehrElementare 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
MehrProgrammiersprache 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
MehrDeklarationen 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.
MehrKurzeinfü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
MehrProbeklausur: 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,
MehrAufbau 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
Mehr3. 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 ==
MehrAlgorithmen 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
MehrGrundlagen 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
MehrKlassendefinitionen verstehen
Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen
Mehr10. 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
MehrOrganisatorisches. 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
MehrFelder (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
MehrAlgorithmen 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
Mehr6. 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.
Mehr1. 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
MehrStrukturen & 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
MehrEinfü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)
MehrName: 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
MehrJavakurs 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
MehrPass 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
MehrEinstieg 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
MehrEinstieg 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
MehrEinstieg 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