http://Item.h//-----------
#pragma once //Ser till att h-filen bara blir inkluderad en gång.
//Includes
#include <iostream>
#include <conio.h>
#include <string>
//Namespace
using namespace std;
//Den abstrakta klassen Item. Förälderklass till Weapon och Key.
//Eftersom klassen har virituella metoder i sig, kallas klassen för "abstrakt" klass.
class Item{
protected:
string name; //Namn på Item:et
Item* next; //Länk till nästa objekt i listan.
public:
~Item(); //Destruktor (körs när objektet deletas). Se nedan.
Item* getNext(){return this->next;} //Typisk get-metod
void append(Item* soonToBeLastObject); //Lägg till ny sak i listan
void virtual print(void) =0; //Virituell metod. Måste specifieras i barnklasserna.
};
//Destruktor. Körs när objketet deletas.
//Eftersom vi har en länkad lista och allokerar minne dynamiskt så måste vi rensa upp minnet efter oss.
//Här kör vi altså delete på objektets next;
//Så att: objektet deletar sin nästa, som deletar sin nästa, som deletar sin nästa osv...
Item::~Item(){
cout << "\nDeleting " << name;
//Kontrollera att next inte är NULL
if (this->next){
//Om det finns en next: Ta bort den.
delete this->next;
}else{
//Om det inte finns så är vi längst bak i listan.
cout << "\nEnd of list.";
}
}
//Lägger till ett till Item i listan. Får Item:et med sig som argument.
void Item::append(Item* soonToBeLastObject){
//Kontrollera att this->next inte är NULL
if (this->next){
//Om next inte är NULL:kolla vidare i listan.
this->next->append(soonToBeLastObject); //Rekursivt funktionsanrop. :)
//Den kör sigsjälv på objektets next.
//Alltså: this kör append() på sin next, som kör append() på sin next, som kör append på sin next osv... ända till vi kommit längst bak i listan.
}else{
//Om next är NULL: Så är vi längst bak i listan.
this->next = soonToBeLastObject; //Lägg till det nya objektet i next.
}
}