Итак, в предыдущем шаге мы каждый раз описывали и переменную и вручную связывали. Вообше нужно, что бы это делалось автоматически скажем по команде AddField.
Для этого заведем класс для записей(контейнер).
class CAllField { public: CAllField(); void AddField(); // добавить запись int GetCount(); // взять количество private: CField *Top; // указатель на первый обьект };
Итак, когда создан класс - обьекта Top(первый) у нас нет.
CAllField::CAllField() { Top=NULL; }
Теперь добавление новой записи:
void CAllField::AddField() { if (Top) { CField * temp=Top; while (temp->Next) temp=temp->Next; temp->Next=new CField(); } else Top=new CField(); }
По русски это так. Если Обьекта Top нет, тогда создаем новый Top=new CField(), а если он есть тогда временной переменной присваиваем обьект Top и идем по связам Next пока не встретим конец (NULL). Создаем новый обьект в конце.
Подсчет обьектов
int CAllField::GetCount() { CField* temp=Top; int count=0; while (temp) { count++; temp=temp->Next; } return count; }
Логика таже, идем по связям и считаем обьекты.
Теперь попробуем.
void main() { CAllField alls; alls.AddField(); alls.AddField(); alls.AddField(); alls.AddField(); cout << alls.GetCount() << endl; }
Дожно появиться 4. У меня вроде так :-).
Для прохода по всем элементам необходиом идти по связям.
CField* temp=Top; while (temp->Next) temp=temp->Next;