Imam 2 pitanja.
1)
Find() takes a PartNumber and a ULONG. If the part corresponding to PartNumber is found, it returns a pointer to the Part and fills the ULONG with the position of that part in the list. If PartNumber is not found, it returns NULL, and the position is meaningless.
200: Part* PartsList::Find(ULONG & position, ULONG PartNumber) const
201: {
202: PartNode * pNode = 0;
203: for (pNode = pHead, position = 0;
204: pNode!=NULL;
205: pNode = pNode->GetNext(), position++)
206: {
207: if (pNode->GetPart()->GetPartNumber() == PartNumber)
208: break;
209: }
210: if (pNode == NULL)
211: return NULL;
212: else
213: return pNode->GetPart();
214: }
Postojanje parametra position, po meni, nema smisla, jer isti taj parametar u ovoj f-ji inicijalizujemo nulom, a i kako bi, i zasto bi mi trebali znati position nekog clana liste, ako ova f-ja obezbedjuje pronalazenje na osnovu PartNumber ?
Dakle, s jedne strane autor kaze da se position uzima kao parametar, a zatim da sama f-ja,(kao jedan od rezultata) popunjava ULONG polje pozicijom dela u listi, sto meni zvuci malo shizofreno (?)
2)
140: class PartsList
141: {
142: public:
143: PartsList();
144: ~PartsList();
145: // needs copy constructor and operator equals!
146: Part* Find(ULONG & position, ULONG PartNumber) const;
147: ULONG GetCount() const { return itsCount; }
148: Part* GetFirst() const;
149: static PartsList& GetGlobalPartsList() //!!!!!!!!!!!!!!
150: {
151: return GlobalPartsList;
152: }
153: void Insert(Part *);
154: void Iterate(void (Part::*f)()const) const;
155: Part* operator[](ULONG) const;
156: private:
157: PartNode * pHead;
158: ULONG itsCount;
159: static PartsList GlobalPartsList; //!!!!!!!!!!!!!!!
162: PartsList PartsList::GlobalPartsList; //!!!!!!!!!!!!!!!
Jasno je zasto se static inicijalizuje izvan klase, ali cini se meni da u lin 162 nema nikakve inicijalizacije (kako kaze autor) vec samo ponovljene deklaracije; zar rec static, ne moze implicitno da zameni ovu (prakticno) duplu deklaraciju, tako da kompajler zna da je ona u opsegu celog programa ?
I, na kraju:
274: int main()
275: {
276: PartsList pl = PartsList::GetGlobalPartsList();
E ovo je za mene prava mystica. Cime se ovde u biti stvari inicijalizuje nasa nova lista pl ??
Sta je pretenzija sa ovom GlobalPartsList ?
Da li mozda neka integrisana lista koja ce inkorporirati i sortirati sve clanove svake novounete liste ?
Ako je to, zasto onda uopste kreiramo novu listu, i ne pozovemo jednostavno Global, i radimo na njoj ?
Tx^2
P.S. Ako je za odgovore na ova pitanja eventualno potreban celovit kod, molim za blagoslov da ovde postujem isti od 311 linija.