Container für eine Folge gleichartiger Daten. Dynamische Datentypen. Probleme mit Feldern...aber nicht mit std::vector. ... und auch std::vector

Größe: px
Ab Seite anzeigen:

Download "Container für eine Folge gleichartiger Daten. Dynamische Datentypen. Probleme mit Feldern...aber nicht mit std::vector. ... und auch std::vector"

Transkript

1 // Container für eine Folge gleichartiger Daten Dynamische Datentyen Listen; Funktionalität, Coy- Konstruktor, Zuweisungsoerator,, Konzet Dynamischer Datenty n Bisher: Felder (T[],std::array<T>, std::vector<t>) n Zusammenhängender Seicherbereich, wahlfreier Zugriff (auf i-tes Element) Probleme mit Feldern...aber nicht mit std::vector n Man kann sie nicht direkt koieren und zuweisen n Falls Länge nicht zur Komilierungszeit bekannt, muss Seicher exlizit mit new geholt und mit delete[] wieder freigegeben werden (fehleranfällig) n Sie können nicht wachsen/schrumfen Probleme mit Feldern... und auch std::vector n Man kann keine Elemente in der Mitte oder in der Mitte löschen Wollen wir hier, müssen wir alles rechts davon exlizit verschieben Probleme mit Feldern... und auch std::vector n Man kann keine Elemente in der Mitte oder in der Mitte löschen Probleme mit Feldern... und auch std::vector n Man kann keine Elemente in der Mitte oder in der Mitte löschen Wollen wir hier, müssen wir alles rechts davon exlizit verschieben Wollen wir hier, müssen wir alles rechts davon exlizit verschieben

2 // Probleme mit Feldern... und auch std::vector n Man kann keine Elemente in der Mitte oder in der Mitte löschen Wollen wir hier löschen, müssen wir alles rechts davon exlizit verschieben Probleme mit Feldern... und auch std::vector n Man kann keine Elemente in der Mitte oder in der Mitte löschen Wollen wir hier löschen, müssen wir alles rechts davon exlizit verschieben Probleme mit Feldern... und auch std::vector n Man kann keine Elemente in der Mitte oder in der Mitte löschen Wollen wir hier löschen, müssen wir alles rechts davon exlizit verschieben Lösung: Listen Container für eine Folge von Daten gleichen Tys Kein zusammenhängender Seicherbereich, kein wahlfreier Zugriff Zeiger Null-Zeiger Eine Klasse für Listen: Daten- Mitglieder, Default-Konstruktor Eine Klasse für Listen: Daten- Mitglieder, Default-Konstruktor class List ublic: // default constructor: // POST: *this is an emty list List(); rivate: Node* _; ; class List ublic: // default constructor: // POST: *this is an emty list List(); rivate: Node* _; ; _ class Node rivate: int ; Node* ; ; class Node rivate: int ; Node* ; ;

3 // Eine Klasse für Listen: Daten- Mitglieder, Default-Konstruktor und Ausgabe class List ublic: // default constructor: // POST: *this is an emty list List(); rivate: Node* _; ; List::List() : _(0) MyList.c _ Nullzeiger n Gewünschter Anwendungscode: #include "" #include<iostream> int main() List l; l.ush_front (); // l == l.ush_front (); // l == l.ush_front (); // l == std::cout << l << std::endl; // und Ausgabe und Ausgabe n Vorne : n Vorne : // POST: key was added before first void ush_front(int key); _ // POST: key was added before first void ush_front(int key); _ MyList.c void List::ush_front (int key) _ = new Node (key, _); MyList.c void List::ush_front (int key) _ = new Node (key, _); und Ausgabe und Ausgabe n Vorne : n Vorne : // POST: key was added before first void ush_front(int key); _ // Constructor MyNode.c Node::Node (int key, Node* next) : (key), (next) _ MyList.c void List::ush_front (int key) _ = new Node (key, _); MyList.c void List::ush_front (int key) _ = new Node (key, _);

4 // und Ausgabe n Ausgabe: MyList.c // POST: *this is written to std::cout std::ostream& oerator<< (std::ostream& o, const List& l) const Node* = l.get_(); while (!= 0) o << ->get_key() << " "; return o; l.get_() 9 und Ausgabe n Ausgabe: MyList.c // POST: *this is written to std::cout std::ostream& oerator<< (std::ostream& o, const List& l) const Node* = l.get_(); while (!= 0) o << ->get_key() << " "; ->get_key() return o; l.get_() 9 und Ausgabe n Ausgabe: MyList.c // POST: *this is written to std::cout std::ostream& oerator<< (std::ostream& o, const List& l) const Node* = l.get_(); while (!= 0) o << ->get_key() << " "; ->get_key() return o; l.get_() Abkürzung für (*).get_key() 9 und Ausgabe n Ausgabe: MyList.c // POST: *this is written to std::cout std::ostream& oerator<< (std::ostream& o, const List& l) const Node* = l.get_(); while (!= 0) o << ->get_key() << " "; ->get_next() return o; l.get_() 9 void ush_back (int key); void ush_back (int key); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); 4

5 // void ush_back (int key); void ush_back (int key); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); MyNode.h Zweites Argument ist 0 er Default // Constructor Node(int key, Node* next = 0); void ush_back (int key); void ush_back (int key); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void ush_back (int key); void ush_back (int key); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key));

6 // void ush_back (int key); void ush_back (int key); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void ush_back (int key); void ush_back (int key); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); void ush_back (int key); void List::ush_back (int key) MyList.c if (_ == 0) _ = new Node (key); else while (->get_next()!= 0) ->set_next (new Node (key)); Coy-Konstruktor n Was assiert hier? int main() List l; l.ush_front (); // l == l.ush_front (); // l == l.ush_front (); // l == std::cout << l << std::endl; // List l = l; std::cout << l << std::endl; l.ush_back(); l.ush_back(); std::cout << l << std::endl;

7 // Coy-Konstruktor n Was assiert hier? int main() List l; l.ush_front (); // l == l.ush_front (); // l == l.ush_front (); // l == std::cout << l << std::endl; // Coy-Konstruktor n Was assiert hier? int main() List l; l.ush_front (); // l == l.ush_front (); // l == l.ush_front (); // l == std::cout << l << std::endl; // List l = l; std::cout << l << std::endl; l.ush_back(); l.ush_back(); std::cout << l << std::endl; // Koiere l nach l List l = l; // Koiere l nach l std::cout << l << std::endl; // l.ush_back(); l.ush_back(); std::cout << l << std::endl; Coy-Konstruktor n Was assiert hier? int main() List l; l.ush_front (); // l == l.ush_front (); // l == l.ush_front (); // l == std::cout << l << std::endl; // Coy-Konstruktor l wurde verändert, aber die gleichen Aenderungen assieren int main() auch mit l. Warum? List l; l.ush_front (); // l == l.ush_front (); // l == l.ush_front (); // l == std::cout << l << std::endl; // n Was assiert hier? List l = l; // Koiere l nach l std::cout << l << std::endl; // l.ush_back(); // l == l.ush_back(); // l == std::cout << l << std::endl; List l = l; // Koiere l nach l std::cout << l << std::endl; // l.ush_back(); // l == l.ush_back(); // l == std::cout << l << std::endl; // Coy-Konstruktor Coy-Konstruktor l List l = l; Initialisierung erfolgt mitgliedsweise, also l._ = l._ (nicht die Liste wird koiert, sondern nur der Zeiger auf das erste Element; l und l teilen sich nun die Liste. l List l = l; std::cout << l << std::endl; Ausgabe l l 7

8 // Coy-Konstruktor Coy-Konstruktor l List l = l; std::cout << l << std::endl; l.ush_back(); l.ush_back(); l List l = l; std::cout << l << std::endl; l.ush_back(); l.ush_back(); std::cout << l << std::endl; l l Ausgabe Coy-Konstruktor n Wir wollen eine echte Koie, wenn wir List l = l schreiben! l l Coy-Konstruktor o...der Klasse T ist der eindeutige Konstruktor mit Deklaration T (const T& x); o wird automatisch aufgerufen, wenn Werte vom Ty T mit Werten vom Ty T initialisiert werden o T x = t; // t vom Ty T Coy-Konstruktor o...der Klasse T ist der eindeutige Konstruktor mit Deklaration T (const T& x); o wird automatisch aufgerufen, wenn Werte vom Ty T mit Werten vom Ty T initialisiert werden o T x (t); // t vom Ty T Coy-Konstruktor o...der Klasse T ist der eindeutige Konstruktor mit Deklaration T (const T& x); o wird automatisch aufgerufen, wenn Werte vom Ty T mit Werten vom Ty T initialisiert werden o Initialisierung von formalen Funktions- Argumenten und Rückgabewerten

9 // Coy-Konstruktor // coy constructor : _ (0) coy (l._); MyList.c Warum ist const List& l hier zwingend notwendig, während List l nicht geht? ublic: List (const List& l); rivate: // PRE: *this is emty // POST: list starting at from was coied to *this void coy (const Node* from); Coy-Konstruktor // coy constructor : _ (0) coy (l._); ublic: MyList.c Aufruf eines Coy-Konstruktors mit Deklaration List (List l); müsste zuerst den Coy-Konstruktor aufrufen (Initialisierung des formalen Arguments!); unendliche Rekursion! List (const List& l); rivate: // PRE: *this is emty // POST: list starting at from was coied to *this void coy (const Node* from); Coy-Konstruktor o Falls kein Coy-Konstruktor deklariert ist, so wird er automatisch erzeugt (und initialisiert mitgliedsweise) Das ist für unsere Klasse List genau nicht das, was wir wollen (es wird nur der Zeiger _ koiert, nicht jedoch die dahinterliegende Liste wir erhalten Alias-Semantik)! Eine Klasse für Listen: Die (rivate) Coy-Funktion // rivate coy method // coy consructor void List::coy (const Node* from) : _ (0) coy (l._); if (from!= 0) // coy first element to _ = new Node (from->get_key()); Node* = from->get_next(); Node* q = _; *this. // coy remaining elements while (!= 0) q->set_next (new Node (->get_key())); q = q->get_next(); Eine Klasse für Listen: Die (rivate) Coy-Funktion Eine Klasse für Listen: Die (rivate) Coy-Funktion // rivate coy method // coy constructor void List::coy (const Node* from) : _ (0) coy (l._); if (from!= 0) // coy first element to _ = new Node (from->get_key()); Node* = from->get_next(); Node* q = _; *this. // coy remaining elements while (!= 0) q->set_next (new Node (->get_key())); q = q->get_next(); from // rivate coy method // coy constructor void List::coy (const Node* from) : _ (0) coy (l._); if (from!= 0) // coy first element to _ = new Node (from->get_key()); Node* = from->get_next(); Node* q = _; *this. // coy remaining elements while (!= 0) q->set_next (new Node (->get_key())); q = q->get_next(); from 9

10 // Eine Klasse für Listen: Die (rivate) Coy-Funktion Eine Klasse für Listen: Die (rivate) Coy-Funktion // rivate coy method // coy constructor void List::coy (const Node* from) : _ (0) coy (l._); if (from!= 0) // coy first element to _ = new Node (from->get_key()); Node* = from->get_next(); q Node* q = _; *this. // coy remaining elements while (!= 0) q->set_next (new Node (->get_key())); q = q->get_next(); from // rivate coy method // coy constructor void List::coy (const Node* from) : _ (0) coy (l._); if (from!= 0) // coy first element to _ = new Node (from->get_key()); Node* = from->get_next(); q Node* q = _; *this. // coy remaining elements while (!= 0) q->set_next (new Node (->get_key())); q = q->get_next(); from Eine Klasse für Listen: Die (rivate) Coy-Funktion Eine Klasse für Listen: Die (rivate) Coy-Funktion // rivate coy method // coy constructor void List::coy (const Node* from) : _ (0) coy (l._); if (from!= 0) // coy first element to _ = new Node (from->get_key()); Node* = from->get_next(); Node* q = _; *this. // coy remaining elements q while (!= 0) q->set_next (new Node (->get_key())); q = q->get_next(); from // rivate coy method // coy constructor void List::coy (const Node* from) : _ (0) coy (l._); if (from!= 0) // coy first element to _ = new Node (from->get_key()); Node* = from->get_next(); Node* q = _; *this. // coy remaining elements q while (!= 0) q->set_next (new Node (->get_key())); q = q->get_next(); und so weiter... from Eine Klasse für Listen: Echtes Koieren List l; l.ush_front (); l.ush_front (); l.ush_front (); std::cout << l << std::endl; // Aufruf unseres Coy-Konstruktors List l = l; std::cout << l << std::endl; // l.ush_back (); l.ush_back (); std::cout << l << std::endl; // std::cout << l << std::endl; // Zuweisungsoerator o Überladung von oerator= als Mitglieds-Funktion o ähnlich wie Coy-Konstruktor ohne Initialisierer, aber zusätzlich o o List l; l = l; Freigabe des Seichers für den alten Wert Prüfen auf Selbstzuweisungen (l = l), die keinen Effekt haben sollten 0

11 // Zuweisungsoerator List& List::oerator= (const List& l) if (_!= l._) Prüfen auf Selbstzuweisungen coy (l._); return *this; Zuweisungsoerator List& List::oerator= (const List& l) if (_!= l._) Freigabe des Seichers für den alten Wert coy (l._); return *this; Zuweisungsoerator List& List::oerator= (const List& l) if (_!= l._) coy (l._); Das eigentliche Koieren return *this; Zuweisungsoerator List& List::oerator= (const List& l) if (_!= l._) coy (l._); return *this; Konvention: Zuweisungsoerator gibt den neuen Wert als L-Wert zurück. Zuweisungsoerator o Falls kein Zuweisungsoerator deklariert ist, so wird er automatisch erzeugt (und weist mitgliedsweise zu) Das ist für unsere Klasse List wiederum nicht das, was wir wollen (es wird nur der Zeiger _ koiert, nicht jedoch die dahinterliegende Liste wir erhalten Alias-Semantik)! Zuweisungsoerator std::cout << l << std::endl; // std::cout << l << std::endl; // List l; l = l; Aufruf unseres Zuweisungsoerators std::cout << l << std::endl; //

12 // n Problem: Quelltext enthält jede Menge new s, aber keine delete s, das führt zu Seicherlecks n Die delete s sollen assieren, wenn wir die Liste nicht mehr brauchen. void List::ush_front (int key) _ = new Node (key, _); n Problem: Quelltext enthält jede Menge new s, aber keine delete s, das führt zu Seicherlecks n Die delete s sollen assieren, wenn wir die Liste nicht mehr brauchen... n Nämlich genau dann, wenn ihre automatische Seicherdauer endet! n Nämlich genau dann, wenn ihre automatische Seicherdauer endet! int main() List l; l.ush_front (); l.ush_front (); l.ush_front (); std::cout << l << std::endl; // return 0; Ziel genau wie bei fundamentalen Tyen: Ende des Gültigkeitsbereichs, der Seicher wird wieder freigegeben. n Der ist eine sezielle Mitgliedsfunktion, die automatisch aufgerufen wird, wenn die Seicherdauer eines Klassenobjekts endet. n Wird kein deklariert, so wird er automatisch erzeugt und ruft die en für die Datenmitglieder auf (hier: Zeiger _, kein Effekt) : Name wie die Klasse, mit ~ davor, und stets ohne Argumente gibt ihren Seicher frei. while (!= 0) delete _; _ = ;

13 // gibt ihren Seicher frei. while (!= 0) delete _; _ = ; gibt ihren Seicher frei. while (!= 0) delete _; _ = ; gibt ihren Seicher frei. while (!= 0) delete _; _ = ; gibt ihren Seicher frei. while (!= 0) delete _; _ = ; gibt ihren Seicher frei. while (!= 0) delete _; _ = ; gibt ihren Seicher frei. while (!= 0) delete _; _ = ;

14 // Dynamischer Datenty gibt ihren Seicher frei. while (!= 0) delete _; _ = ; o Ty, der dynamischen Seicher verwaltet (z.b. unsere Klasse für Listen) o andere tyische Anwendungen: o o o Stael Bäume Grahen Dynamischer Datenty o sollte immer mindestens o Konstruktoren o o Coy-Konstruktor o Zuweisungsoerator haben. n Zur Erinnerung: damit haben wir Listen motiviert! n Gewünschte Funktionalität: // POST: the first occurrence of key was removed from *this // if *this does not contain key, nothing haened void remove (int key); if (_!= 0) if (->get_key() == key) _ = _->get_next(); delete ; else while (->get_next()!= 0) Node* q = ->get_next(); if (q->get_key() == key) ->set_next(q->get_next()); else = q; Fall : erstes Element wird entfernt (key == ). if (_!= 0) if (->get_key() == key) _ = _->get_next(); delete ; else while (->get_next()!= 0) Node* q = ->get_next(); if (q->get_key() == key) ->set_next(q->get_next()); else = q; Fall : erstes Element wird entfernt (key == ). 4

15 // if (_!= 0) if (->get_key() == key) _ = _->get_next(); delete ; else while (->get_next()!= 0) Node* q = ->get_next(); if (q->get_key() == key) ->set_next(q->get_next()); else = q; Fall : erstes Element wird entfernt (key == ). if (_!= 0) if (->get_key() == key) _ = _->get_next(); delete ; else while (->get_next()!= 0) Node* q = ->get_next(); if (q->get_key() == key) ->set_next(q->get_next()); else = q; Fall : anderes Element wird entfernt (key == ). if (_!= 0) if (->get_key() == key) _ = _->get_next(); delete ; else while (->get_next()!= 0) Node* q = ->get_next(); if (q->get_key() == key) ->set_next(q->get_next()); else = q; Fall : anderes Element wird entfernt (key == ). q if (_!= 0) if (->get_key() == key) _ = _->get_next(); delete ; else while (->get_next()!= 0) Node* q = ->get_next(); if (q->get_key() == key) ->set_next(q->get_next()); else = q; Fall : anderes Element wird entfernt (key == ). q if (_!= 0) if (->get_key() == key) _ = _->get_next(); delete ; else while (->get_next()!= 0) Node* q = ->get_next(); if (q->get_key() == key) ->set_next(q->get_next()); else = q; Fall : anderes Element wird entfernt (key == ). q Fall : anderes Element wird entfernt (key == ). if (_!= 0) if (->get_key() == key) _ = _->get_next(); delete ; else while (->get_next()!= 0) Node* q = ->get_next(); if (q->get_key() == key) ->set_next(q->get_next()); q else = q; Fertig!

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

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit

Mehr

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

Visuelle Kryptographie. Anwendung von Zufallszahlen

Visuelle Kryptographie. Anwendung von Zufallszahlen Visuelle Kryptographie Anwendung von Zufallszahlen Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken, so dass Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken,

Mehr

Datenkapselung: public / private

Datenkapselung: public / private 612 18. Klassen Klassen, Memberfunktionen, Konstruktoren, Stapel, verkettete Liste, dynamischer Speicher, Copy-Konstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp Datenkapselung:

Mehr

Dynamische Datentypen

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

Mehr

Felder: Motivation. Felder (Arrays) und Zeiger (Pointers) - Teil I. Felder: erste Anwendung. Felder: erste Anwendung

Felder: Motivation. Felder (Arrays) und Zeiger (Pointers) - Teil I. Felder: erste Anwendung. Felder: erste Anwendung Felder (Arrays) und Zeiger (Pointers) - Teil I Felder: Motivation Wir können jetzt über Zahlen iterieren: for (int i=; i

Mehr

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Teil 8: Dynamische Speicherverwaltung Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 8 Dynamische Speicherverwaltung... 3 8.1

Mehr

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 - ! 1. Rekursive Algorithmen! 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Ausdruck Ausdruck Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ Ausdruck ] ( Ausdruck

Mehr

Felder: Motivation. Felder (Arrays) und Zeiger (Pointers) - Teil I. Felder: erste Anwendung. Felder: erste Anwendung. Felder: erste Anwendung

Felder: Motivation. Felder (Arrays) und Zeiger (Pointers) - Teil I. Felder: erste Anwendung. Felder: erste Anwendung. Felder: erste Anwendung 1/16/12 Felder (Arrays) und Zeiger (Pinters) - Teil I Feldtyen, Sieb des Eratsthenes, Iteratin, Zeigertyen, Zeigerarithmetik, dynamische Seicherverwaltung Felder: Mtivatin n Wir können jetzt über Zahlen

Mehr

Informatik 1 ( ) D-MAVT F2011. Klassen, Funktionen. Yves Brise Übungsstunde 9

Informatik 1 ( ) D-MAVT F2011. Klassen, Funktionen. Yves Brise Übungsstunde 9 Informatik 1 (251-0832-00) D-MAVT F2011 Klassen, Funktionen Nachbesprechung Blatt 7, Aufgabe 1 Wenn Funktion void als Rückgabetyp hat, dann ist return nicht notwendig. void swap3(int* a, int* b) { int

Mehr

13. Dynamische Datenstrukturen

13. Dynamische Datenstrukturen Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Sortierte Liste 40 40 Motivation: Stapel ( push, pop, top, empty ) Wir brauchen einen neuen

Mehr

Dynamische Datenstrukturen in C++ 150

Dynamische Datenstrukturen in C++ 150 Dynamische Datenstrukturen in C++ 150 In allen bisherigen Beispielen belegten die Objekte entweder statischen Speicherplatz oder sie lebten auf dem Stack. Dies vermied bislang völlig den Aufwand einer

Mehr

Lindenmayer-Systeme: Fraktale rekursiv zeichnen

Lindenmayer-Systeme: Fraktale rekursiv zeichnen Lindenmayer-Systeme: Fraktale rekursiv zeichnen Lindenmayer-Systeme: Definition o Alphabet Σ ( Beispiel: {F, +, -} ) Lindenmayer-Systeme: Definition o Alphabet Σ ( Beispiel: {F, +, -} ) o Σ * = Menge aller

Mehr

Implementieren von Klassen

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

Mehr

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

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

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen Lambda-Funktionen Lambda-Funktionen sind Funktionen ohne Namen. definieren ihre Funktionalität an Ort und Stelle. können wie Daten kopiert werden. können ihren Aufrufkontext speichern. Lambda-Funktionen

Mehr

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte entstehen durch... globale Objektvereinbarung: T o; blocklokale Objektvereinbarung: {.. T o;.. durch expliziten Aufruf

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

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Feldtypen, Sieb des Eratosthenes, Iteration, Zeigertypen, Zeigerarithmetik, dynamische Speicherverwaltung Felder: Motivation Wir können jetzt über Zahlen

Mehr

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Feldtypen, Sieb des Eratosthenes, Iteration, Zeigertypen, Zeigerarithmetik, dynamische Speicherverwaltung Felder: Motivation n Wir können jetzt über Zahlen

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

Structs, Referenztypen und Const-Typen

Structs, Referenztypen und Const-Typen Structs, Referenztypen und Const-Typen Rechnen mit rationalen Zahlen o Rationale Zahlen (Q) sind von der Form n/d, mit n und d ausz o C++ hat keinen eingebauten Typ für rationale Zahlen Rechnen mit rationalen

Mehr

Lindenmayer-Systeme: Fraktale rekursiv zeichnen. Definition. Definition. Definition. o Alphabet Σ ( Beispiel: {F, +, -} )

Lindenmayer-Systeme: Fraktale rekursiv zeichnen. Definition. Definition. Definition. o Alphabet Σ ( Beispiel: {F, +, -} ) Fraktale rekursiv zeichnen Definition o Alphabet Σ ( Beispiel: F, +, - ) Definition o Alphabet Σ ( Beispiel: F, +, - ) o Σ * = Menge aller endlichen Wörter über Σ ( Beispiel: F+F+ ist in Σ * ) Definition

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

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

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

Mehr

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Felder: Motivation Wir können jetzt über Zahlen iterieren: for (int i=0; i

Mehr

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

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

Mehr

Einführung in die Programmierung mit C++

Einführung in die Programmierung mit C++ 1 Seite 1 Einführung in die Programmierung mit C++ Teil III - Objektorientierte Programmierung 10. Vererbung und Polymorphie Vererbung und Polymorphie in C++ Seite 2 Klassen können von anderen Klassen

Mehr

Konstruktor/Destruktor

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

Mehr

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

19. Vererbung und Polymorphie

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

Mehr

Bildverarbeitung mit C++

Bildverarbeitung mit C++ Bildverarbeitung mit C++ Lösung zum Übungsblatt 1 Dr. Stefan Florczyk 2003 // Aufgabe 2 #include #include double factorial(double d) double erg = 1; for (int i = 1; i

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

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

Programmierkurs C/C++

Programmierkurs C/C++ Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Donnerstag Sandro Andreotti andreott@inf.fu-berlin.de WS 2008/09 1 Structs Blockkurs: "Einführung in C/C++" 2 Structs sind Bündel von Variablen (unter

Mehr

Vorlesungsprüfung Programmiersprache 1

Vorlesungsprüfung Programmiersprache 1 Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,

Mehr

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

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

Mehr

C++ - Objektorientierte Programmierung Konstante und statische Elemente

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

Mehr

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

Prüfung Informatik D-MATH/D-PHYS :00 17:00 Prüfung Informatik D-MATH/D-PHYS 9. 8. 0 5:00 7:00 Prof. Bernd Gartner Kandidat/in: Name:. Vorname:. Stud.-Nr.:. Ich bezeuge mit meiner Unterschrift, dass ich die Prufung unter regularen Bedingungen ablegen

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens mit C++ und Matlab SS2013 Inhalt Bis jetzt: Heute: Entwicklungsumgebung

Mehr

7. Übung Informatik II - Objektorientierte Programmierung

7. Übung Informatik II - Objektorientierte Programmierung 7. Übung Informatik II - Objektorientierte Programmierung 29. Mai 2015 Inhalt 1 2 3 Übersicht 1 2 3 Idee Menschen nehmen die Welt in Form von Objekten wahr manche Objekte haben gleiche Eigenschaften, hierüber

Mehr

1 Klassen und Objekte

1 Klassen und Objekte 1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente

Mehr

Programmieren in C++ Klassen

Programmieren in C++ Klassen Programmieren in C++ Klassen Inhalt Klassen (vertieft) Destruktor Konstruktoren Move-Semantik und Rechtswert-Referenzen (C++11) C++11 Features Prof. Dr. C. Stamm Programmieren in C++, FS 13 4-2 Implementierung

Mehr

C++ - Objektorientierte Programmierung Vererbung

C++ - Objektorientierte Programmierung Vererbung C++ - Objektorientierte Programmierung Vererbung Personen Kunden Mitarbeiter Verwaltung Verkäufer Leibniz Universität IT Services Anja Aue Vererbung Definition von Klassen auf Basis von bestehenden Klassen.

Mehr

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Knopp 03.05.2017 Folie 1/34 GK C++: IDE, Klassenhierarchien Martin Knopp 03.05.2017 IDE Integrated Development Environment Wir empfehlen: Qt Creator (Bestandteil

Mehr

Informatik 1 ( ) D-MAVT F2010. Letzte Übungsstunde. Yves Brise Übungsstunde 12

Informatik 1 ( ) D-MAVT F2010. Letzte Übungsstunde. Yves Brise Übungsstunde 12 Informatik 1 (251-0832-00) D-MAVT F2010 Letzte Übungsstunde Evaluation S3 Frage zu Assistierenden INFK Anz. Der/die Assistent/in war fachlich k.ä. 0 kompetent 1 0 2 0 3 0 4 23% 3 5 77% 10 MW = 4.8 SA =

Mehr

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 Folie 1/35 GK C++: IDE, Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 IDE Integrated Development Environment

Mehr

Verkettete Listen. DVG Verkettete Listen 1

Verkettete Listen. DVG Verkettete Listen 1 Verkettete Listen DVG2-03 - Verkettete Listen 1 Primitive typen Vorteile: werden direkt vom Prozessor unterstützt schneller Zugriff schnelle Verarbeitung Nachteile: kleine menge feste Struktur unflexibel

Mehr

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

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Klausur Programmieren 2 SS 2016

Klausur Programmieren 2 SS 2016 Klausur Programmieren 2 SS 2016 Name Gruppe 1 Vorname Dauer 90 min Matrikelnummer Hilfsmittel keine Die Klausur ist mit 50 Punkten sicher bestanden. Hinweise: Formulieren Sie Ihre Lösungen auf dem Aufgabenblatt

Mehr

Elementare Konzepte von

Elementare Konzepte von Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 };

C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 }; neu in C++11: range-based for int array[] = { 1, 2, 3, 4, 5 ; for (int x : array) // value x *= 2; C++11 for (int& x : array) // reference x *= 2; Ersetzung durch: { auto && range = range-init; for ( auto

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

Objektorientierung: Klassen und Objekte

Objektorientierung: Klassen und Objekte Objektorientierung: Klassen und Objekte Klasse: Beschreibung für eine Menge von Objekten Schablone, Bauplan abstrakte Form Objekt: Instanz einer Klasse konkreter Inhalt (Werte) Klassen bestehen aus Attributen

Mehr

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen Prof. Dr. Wolfgang Schramm Vorlesung Exkurs: Anonyme Klassen Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Vorlesung Exkurs: Anonyme Klassen Techniken der Programmentwicklung Anonyme Klassen

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

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

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

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

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

Übung HP Angabe: #include <iostream> #include <vector> #include <locale>

Übung HP Angabe: #include <iostream> #include <vector> #include <locale> Aufgabe 1: Schreiben Sie ein C++ Programm, das die eigene Klasse Words definiert. Die Idee ist, dass diese Klasse in einem wstring Vector alle Wörter eines Textes speichert. In Ihrem private Bereich soll

Mehr

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 11: Kurzeinführung in C++ Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg i. Br. Vorlesung vom 11.

Mehr

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

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1 Algorithmen und Datenstrukturen Wintersemester 2016/17 11. Vorlesung Elementare Datenstrukturen: Stapel + Schlange + Liste Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I 2-4 Zur Erinnerung Datenstruktur:

Mehr

Klassen als Datenstrukturen

Klassen als Datenstrukturen Einstieg in die Informatik mit Java, Vorlesung vom 27.11.07 Übersicht 1 Klassen als Datenstruktur 2 Vereinbarung von Klassen 3 Erzeugen von Objekten - Instanzen einer Klasse 4 Zugriff auf Attribute 5 Initialisierung

Mehr

Informatik II Übung, Woche 14

Informatik II Übung, Woche 14 Giuseppe Accaputo 7. April, 2016 Plan für heute 1. Java Klassen Beispiel: Implementation eines Vorlesungsverzeichnis (VVZ) 2. Informatik II (D-BAUG) Giuseppe Accaputo 2 Java Klassen Beispiel: Implementation

Mehr

Objektorientierung (OO)

Objektorientierung (OO) Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members

Mehr

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse.

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

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

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

Java Einführung Methoden. Kapitel 6

Java Einführung Methoden. Kapitel 6 Java Einführung Methoden Kapitel 6 Inhalt Deklaration und Aufruf von Methoden Lokale und globale Namen (Bezeichner) Sichtbarkeit und Lebensdauer von Variablen in Methoden Überladen von Methoden 2 Methoden

Mehr

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5 Informatik 1 (251-0832-00) D-MAVT F2010 Schleifen, Felder Nachbesprechung Blatt 3 Aufgabe 1 ASCII... A > a Vorsicht: Lösen Sie sich von intuitiven Schlussfolgerungen. A ist nicht grösser als a, denn in

Mehr

Fragen zur OOP in Java

Fragen zur OOP in Java - 1 - Inhalt Was bedeutet OOP?... 2 Was versteht man unter einer Klasse?... 2 Wie nennt man die Mitglieder einer Klasse?... 2 Wie erzeugt man Objekte?... 2 Wie greife ich auf Member einer Klasse zu?...

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

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

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

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Strukturen Prof. Dr. Nikolaus Wulff Rekursive Strukturen Häufig müssen effizient Mengen von Daten oder Objekten im Speicher verwaltet werden. Meist werden für diese Mengen

Mehr

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 49 Einfach verkettete Listen O1 O2 O3 50 Einführung Einfach verkettete Listen sind die einfachsten

Mehr

Allgemeines - Prinzipien

Allgemeines - Prinzipien OOP - Prinzipien Allgemeines - Prinzipien OO modelliert die reale Welt als System interagierender Objekte Objekt = gedankliche oder reale Einheit in der Umwelt und/oder in Software Klar definierte Schnittstellen

Mehr

C++ Klassen weitere Funktionen

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

Mehr

Assoziative Container in C++ Christian Poulter

Assoziative Container in C++ Christian Poulter Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: inf@poulter.de Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...

Mehr

18. Vererbung und Polymorphie

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

Mehr

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

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

Mehr

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11 C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen

Mehr

C++ Kurs Teil 3. Standard Template Library (STL) Kommunikation mit der shell Hyper Text Markup Language (HTML)

C++ Kurs Teil 3. Standard Template Library (STL) Kommunikation mit der shell Hyper Text Markup Language (HTML) C++ Kurs Teil 3 Standard Template Library (STL) Übersicht vector algorithm: sort, for_each map Kommunikation mit der shell Hyper Text Markup Language (HTML) O. Ronneberger: C++ Kurs Teil 3 Seite 1

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung C++ Objektorientierte Programmierung Erweiterung von selbstdefinierten Datentypen (struct) zu Klasse. Eine Klasse besteht dann aus - Attributen (Untertypen wie struct) und zusätzlich - aus Methoden (Funktionen

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Wintersemester 2012/13 13. Vorlesung Elementare Datenstrukturen: Stapel + Schlange + Liste Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I 2. Test Termin: (voraussichtlich)

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Dokumentation zum AVL-Baum (C++)

Dokumentation zum AVL-Baum (C++) Dokumentation zum AVL-Baum (C++) Christian Blaar Monique Argus Januar 2007 Institut für Informatik Martin-Luther-Universität Halle-Wittenberg NODE.H Node.h Node legt die Grundlage für jeden Baum, denn

Mehr

Verkettete Datenstrukturen: Listen

Verkettete Datenstrukturen: Listen Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren

Mehr

Die erste C++ Funktion

Die erste C++ Funktion Die erste C++ Funktion Funktion zur Potenzberechnung // PRE: e >= 0 b!= 0.0 // POST: return value is b^e double pow (double b, int e) { double result = 1.0; if (e < 0) { // b^e = (1/b)^(-e) b = 1.0/b;

Mehr

Programmieren in C++

Programmieren in C++ Programmieren in C++ SS 2012 Vorlesung 5, Dienstag 5. Juni 2012 (Klassen, Objekte, Methoden, new & delete) Prof. Dr. Hannah Bast Lehrstuhl für Algorithmen und Datenstrukturen Institut für Informatik Universität

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

C/C++-Programmierung

C/C++-Programmierung 1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung

Mehr

Verkettete Listen in C++ und Visual Basic 6. Stefan Buchgeher

Verkettete Listen in C++ und Visual Basic 6. Stefan Buchgeher Verkettete Listen in C++ und Visual Basic 6 Stefan Buchgeher 8. März 2007 Inhaltsverzeichnis 1 Grundlegendes zu Verketteten Listen (engl. linked list) 2 1.1 Was ist eine Verkettete Liste........................

Mehr