U payroll klasi imas pointer *location koji se inicijalizuje na 0 po kreiranju samog objekta
Code:
// DEFINICIJA KLASE PRIJATELJA
class Payroll
{
private:
ACC *location;
public:
Payroll(void)
{
location = 0;
}
Ok znaci kad se kreira objektat location pokazuje na 0.Znaci u main() kada napravis:
Code:
void main(void)
{
Payroll EmployeeList;
tu location unutar samog objekta pokazuje na 0 jer je konstruktor klase tako rekao ;o)
Code:
Administrator VP1 ("Williams", "Ken", "111-12-2121",
"Potpresednik", 1980, 40000.00);
Administrator VP2 ("Hardgrave", "Bob", "987-99-9653",
"Direktor Prodaje", 1984, 45000.00);
Inicijalizacija i kreiranje dva objekta koje ces da ubacis u listu.
Code:
EmployeeList.AddEmployee(&VP1);
EmployeeList.AddEmployee(&VP2);
E sad treba da se ubacimo u funkciju i nju pazljivo da analiziramo :
Code:
void Payroll::AddEmployee(ACC *node)
{
ACC *current_node = location;
ACC *previous_node = 0;
while (current_node != 0 &&
strcmp(current_node -> LastName, node -> LastName) < 0)
{
previous_node = current_node;
current_node = current_node -> NextNodePtr;
}
Za prvog Administratora se ovaj deo preskace jer je current_node = 0 (zato sto je location = 0 ) ili ovo strcmp() vrsi neku vrstu sortiranja u odnosu na prezimena.
Code:
node -> Add_Data();
setuje
pointer na pokazivac
this koji pokazuje na trenutni objekat unutar funkcije clanice klase(valjda tako bese)
Code:
node -> pointer -> NextNodePtr = current_node;
Ovde se NextNodePtr postavlja da pokazuje na current.
Code:
if (previous_node == 0)
location = node -> pointer;
else
previous_node -> NextNodePtr = node -> pointer;
}
Ako je previous_node = 0 tj. ako je ovo prvi put da se ulece u ovu funkciju location se postavlja da pokazuje na prvi clan liste.
Sa delete je slican princip.a lista bi trebalo hmmm da bude jednosmerna i location pokazuje uvek na prvi clan liste.
[
Ovu poruku je menjao predator dana 07-22-2001 u 12:31 PM GMT]