Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Tutorium Software-Engineering SS14 Florian Manghofer.

Ähnliche Präsentationen


Präsentation zum Thema: "Tutorium Software-Engineering SS14 Florian Manghofer."—  Präsentation transkript:

1 Tutorium Software-Engineering SS14 Florian Manghofer

2 this Class Test{ private: string s; int i; public: Test(string,int); }; Test::Test(string ss, int ii){ s = ss; i = ii; } ohne this: Class Test{ private: string s; int i; public: Test(string,int); }; Test::Test(string s, int i){ this->s = s; this->i = i; } mit this: this-> arbeitet mit verstecktem this this->s = Attribut des aktuellen Objekts s = Parameter des Konstruktors return *this = aktuelles Objekt als Rückgabe

3 new new = dynamische Speicherreservierung zur Laufzeit Auto autos[10]; autos[0].waschen()…. Auto *autos[10]; autos[0] = new Auto(); autos[0]->waschen(); Hier werden 10 Objekte vom Typ Auto erzeugt und Speicher belegt. Hier wird ein Zeiger auf 10 Objekte vom Typ Auto definiert. Es erfolgt keine Speicherreservierung!! Erst mit dem konkreten Erzeugen durch new wird der Speicher für ein Objekt reserviert. delete autos[0]; Löscht das Objekt, Speicher wird freigegeben statischdynamisch

4 new Wieso das Ganze? Die statische Programmierung verschwendet Speicher. Person personen[100]; Hier wird Speicher für 100 Objekte vom Typ Person belegt, obwohl man zu Programmstart vielleicht nur die ersten 4 Objekte braucht.  96 Objekte belegen Speicher, die nicht gebraucht werden  Verschwendung Dynamische Lösung: Person *personen[100]; An der Stelle im Programm, an der ein neues Objekt vom Typ Person gebraucht wird, wird auch erst dieses mittels new erzeugt und damit Speicher belegt.  Somit wird nur soviel Speicher belegt, wie aktuell gebraucht wird.  Ungenutzte Objekte können mit delete gelöscht werden.  Effizient

5 verkettete Liste Problemstellung: Es soll eine Einkaufsliste/Artikelliste.. erstellt werden in der x Objekte gespeichert werden. Bisher: „Es sollten maximal 30 Artikel gespeichert werden können“ Lösung bisher: Artikel liste[30]; Aber was, wenn man keine Obergrenze hat bzw wenn man nicht weiß wieviele Objekte irgendwann gespeichert werden sollen? Arrays können nicht vergrößert werden! Artikel liste*[1000000000000000000]; //sehr schlechter Stil, und was wenn diese erreicht? Lösungen:  verkettete Liste

6 verkettete Liste Funktionsweise: Start der Liste Zeiger auf erstes Objekt in der Liste Erstes Objekt Objekt enthält Zeiger auf nachfolgendes Objekt Zweites Objekt Zeiger des Objekts auf Nachfolger ist 0, d.h. hier ist die Liste zu Ende

7 verkettete Liste Listenelemente müssen mindestens 2 Komponenten enthalten:  Dateninhalt (Attribute usw.)  Zeiger auf Nachfolgendes Objekt Eine verkettete Liste besteht aus 2 Klassen.  Klasse für die zu verkettenden Objekte (Auto,Person,Artikel)  Klasse für die Verwaltung der Liste class Artikel{ friend class ArtikelListe; private: int nr; string beschr; Artikel *nachfolger; public: Artikel(){nachfolger = 0;} Artikel* next(); }; Artikel* Artikel::next(){return nachfolger;} Damit die Verwaltungsklasse ArtikelListe Zugriff auf die Attribute hat (ansonsten mit Getter&Setter) Dateninhalt Zeiger auf das Nachfolgende Objekt Im Konstruktor den nachfolger auf 0 setzen Zeiger auf nächstes Objekt

8 verkettete Liste Steuerung und Verwaltung der Liste: class ArtikelListe{ private: Artikel *anfang; public: void einfuegen(Artikel*); Artikel* loeschen(); Artikel* start(); bool listeleer(); Artikel(){ anfang = 0;} }; void ArtikelListe::einfuegen(Artikel *neu){ neu->nachfolger = anfang; anfang = neu; } Artikel* Artikel::loeschen(){ Artikel *zw = anfang; if(anfang != 0){anfang = anfang->nachfolger;} return zw; } Artikel* Artikel::start(){ return anfang;} bool Artikel::listeleer(){ return anfang == 0;} Zeiger auf das erste Objekt der Liste Im Konstruktor anfang auf 0 setzen, da keine Objekte in der Liste sind Ein neues Objekt wird an den Anfang der Liste eingefügt. Das oberste/erste Objekt der Liste wird aus der Liste gelöscht und zurückgegeben. Es wird nur aus der Liste gelöscht! Liefert Zeiger auf erstes Objekt Prüft ob Liste leer ist

9 verkettete Liste

10 Einfügen nur am Anfang der Liste ohne weiteres möglich. Löschen nur des obersten/ersten Objekts der Liste ohne weiteres möglich. Durchlauf nur von oben nach unten bzw. vorne nach hinten möglich (Einbahnstraße)  Stack - Prinzip Durch Schleifen ist auch das Einfügen/Löschen an einer anderen Stelle der Liste möglich Ganze Liste durchlaufen: Artikel *start = AListe.start(); while(start != 0){ cout get_nr() << endl; start = start->next(); } Zeiger auf das erste Listenobjekt Solange bis der Zeiger nicht 0 ist bzw. bis Objekte in der Liste sind. Zeiger auf das nächste Objekt(Attribut Nachfolger)

11 doppelt verkettete Liste Vorteil: Kann von vorne und von hinten durchlaufen werden (keine Einbahnstraße)


Herunterladen ppt "Tutorium Software-Engineering SS14 Florian Manghofer."

Ähnliche Präsentationen


Google-Anzeigen