Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht...

9
Instructie Programmeren Task 8 5JJ70

Transcript of Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht...

Page 1: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

Instructie Programmeren

Task 85JJ70

Page 2: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

PAGE 2

Task 8: Double Linked List

• Het doel van deze opdracht is:• Het opbouwen van een tweetal klassen, die samen een linked list

implementeren.• De opdracht begeleid je door alle stappen die je moet nemen, probeer dus

niet te veel in 1x te implementeren. Gebruik de opdracht om in kleine stapjes naar een oplossing toe te werken.

• Stap 1 tot 5 zijn al gedaan in het skeleton! Natuurlijk kan het geen kwaad om even te kijken hoe het in elkaar zit, voor je met stap 6 verder gaat.

Page 3: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

Task 8: Double Linked List: Id counter

• Een variabele met het keyword static heeft de volgende eigenschappen:• De variabele wordt 1x geïnitialiseerd:

• Als er een static variabele in een memberfunctie van een klasse voorkomt, wordt deze gedeeld door alle initializaties van de klasse.

PAGE 3

void myTest(void){ static int myStatic = 0; printf("myStatic: %d\n", myStatic); myStatic++;}void main(void) { for(int i=0; i<10; i++) myTest();}

Page 4: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

Task 8: Double Linked List: Stack objecten

• Objecten die op de stack staan, roepen automatisch hun destructor aan wanneer hun stuk van de stack wordt opgeruimd:

PAGE 4

void main(void) {MyClass myObject;MyClass* myObject2 = new MyClass;

// Do stuff here

// Cleanup:delete myObject2;// End of main function, implicitly calls myObject.~MyClass(), so// the destructor function is run

}

Page 5: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

Task 8: Double Linked List: Items itereren

• Door de items in je lijst lopen kan je handig doen met een do…while loop:

PAGE 5

Item* ptr = _top_of_ring;if(ptr){

// If we get here, the list is not emptydo {

// Do stuff with you Item pointer here// Advance to next itemptr = ptr->_next;

} while(ptr != _top_of_ring);}

Page 6: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

Task 8: Double Linked List: Append/Insert

• Bedenk goed met welke verschillende situaties je rekening moet houden:• Een lege lijst

• Een lijst met 1 of meer items

• Maak tekeningen, dit levert vaak veel duidelijkheid op• Wanneer er maar 1 item in de lijst zit, wijzen de _next en _prev

van dat item naar zichzelf!

• (Hint: Is het nodig om Append en Insert allebei “volledig” te implementeren?)

PAGE 6

Item

_next

_prev

_top_of_ring

Page 7: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

Task 8: Double Linked List: Delete

• Het deleten van een item kun je zien als het “doorknippen” van de ring bij de stippellijnen:

Er zijn dus 4 pointers die je moet aanpassen• Wat gebeurt er als je het _top_of_ring item weggooit?• De procedure die je bij het deleten gebruikt om een item los te

koppelen, is ook nuttig bij het verplaatsen van items in de ring

PAGE 7

Item Item_next

_prev

_next

_prev

_top_of_ringItem

_prev

_next

Page 8: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

Task 8: Double Linked List: Inheritance

• De printfunctie uit de opdracht print het _id van je item vanuit de Person klasse, dat kan alleen als je van _id een protected variabele maakt:• Een protected variabele kan worden benaderd vanuit de klasse

zelf, en alle klassen die erven van deze klasse

PAGE 8

Page 9: Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.

Task 8: Double Linked List: Inheritance

• Als je de opdracht letterlijk volgt, zul je merken dat er iets niet kan:• De append functie van je Dlist klasse maakt een nieuw Item object, terwijl je

een Person object nodig hebt• Je ontkomt er dus niet aan om iets aan te passen aan de originele Dlist klasse• Maak bijvoorbeeld een versie van de append functie die een pointer naar het

toe te voegen Item als argument heeft:

In de append functie van je boek kun je een nieuw Person object maken (en de naam doorgeven aan de constructor van Person)

• Vervolgens geef je het nieuwe Person object vanuit je Book append functie door aan de append functie van Dlist

• Dit kan door specifiek te vragen naar de append functie van Dlist:

PAGE 9

void Dlist::append(Item* newitem);void Book::append(char* name);

Dlist::append(myNewPerson);