Итак, в предыдущем шаге мы каждый раз описывали и переменную и вручную связывали. Вообше нужно, что бы это делалось автоматически скажем по команде 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;