Czesć. Proszę Was o wytłumaczenie mi jak najbardziej szczegółowo tego przykładu. Nie byłem na wykładzie z tego i wydaje mi się to magią... Przykład jest sprawdzony i się kompiluje. Drobne uwagi dopisywałem sam.
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------
template <class Typ> class List;
//---------------------------------------------------------------------------
template <class Typ>
class Node {
friend class List<Typ>;
private:
Typ element;
Node *next;
};
//---------------------------------------------------------------------------
template <class Typ>
class List {
private:
Node<Typ> *first;
Node<Typ> *current;
Node<Typ> *last;
public:
int Length;
void AddElement(Typ element);
Typ GetElement(void);
List(Typ element);
~List();
};
//---------------------------------------------------------------------------
template <class Typ> //konstruktor
List<Typ>::List(Typ element){
Node<Typ> *n = new Node<Typ>();
n->element=element;
n->next=NULL;
this->first=n;
this->current=n;
this->last=n;
Length=1;
}
//---------------------------------------------------------------------------
template <class Typ> //destruktor, zwalniajacy pamiec
List<Typ>::~List(){
Node<Typ> *a = new Node<Typ>();
while(first->next!=NULL){
a=first->next;
delete(first);
first=a;
}
delete(a);
}
//---------------------------------------------------------------------------
template <class Typ> //dodanie elementu na koniec listy
void List<Typ>::AddElement(Typ element){
Node<Typ> *a = new Node<Typ>();
a->element=element;
a->next=NULL;
this->last->next=a;
last=a;
this->Length++;
}
//---------------------------------------------------------------------------
template <class Typ> //wziecie elementu z listy
Typ List<Typ>::GetElement(void){
Typ retElement;
retElement=this->current->element;
this->current=this->current->next;
return retElement;
}
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
List<int> *st2 = new List<int>(10);
List<char> *st1 = new List<char>('0');
st2->AddElement(20);
st2->AddElement(30);
st2->AddElement(40);
st1->AddElement('a');
st1->AddElement('b');
st1->AddElement('c');
for(int i=0;i<st2->Length;i++){
printf("%d\n",st2->GetElement());
}
for(int i=0;i<st1->Length;i++){
printf("%c\n",st1->GetElement());
}
getch();
return 0;
}
Pozdrowienia,
Krzysiek