Шаг 2 - Оболочка для класса

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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 20.09.99