Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по C/C++

  Все выпуски  

Уроки по C/C++


Информационный Канал Subscribe.Ru

Уроки по C/C++. Рассылки сайта progs.biz
Начало > C++ > Основы C++ > Урок 28

А. Гультяев. Help. Разработка справочных систем.
А. Гультяев. Help. Разработка справочных систем
Заказать на Озоне


Полные версии уроков (с картинками): урок 28.

C/C++
Урок 28. Практика: список - добавление элементов

С этого урока мы с вами применим полученные знания на практике - а именно, мы создадим динамический список. В него можно будет добавлять элементы (экземпляры некоторого класса CData), показывать все элементы списка, удалять элементы, сортировать, выяснять, есть ли определенный элемент в списке или нет и делать другие стандартные для списка операции.

Итак, начинаем. Сначала напишем класс CData:

// Класс данных.
class CData
{
public:
    // Собственно данные класса.
    int a;
    int b;
    // Указатель на следующий экземпляр класса CData.
    CData * m_pNext;
    
    // Конструкторы класса.
    CData()
    {
        a = 0;
        b = 0;
        m_pNext = NULL;
    }
    CData(int a1, int b1)
    {
        a = a1;
        b = b1;
        m_pNext = NULL;
    }
};

Как вы видите, класс небольшой - в нем всего пара переменных для данных (a и b) и указатель m_pNext типа CData * - он показывает на слудующий элемент в нашем списке. Т. е. первые данные в списке (а данные в нашем случае - это тоже самое, что и экземпляр класса CData) указывают на следующие, те - на следующие и т. п. Последние ни на что показывать не будут - у них в поле m_pNext записан NULL (это мы делаем в конструкторе класса).

Теперь начинаем писать класс списка. Назовем его естественным образом - CList.

На этом уроке мы напишем только метод по добавлению элемента в наш список. Вот так пока будет выглядеть наш класс:

//Класс списка.
class CList
{
public:
    // Указатель на первый элемент списка.
    CData * m_pFirst;
    // Конструктор.
    CList();
    // Добавление данных в конец списка.
    void Add(CData * pNext);
    // Поиск последнего элемента в списке.
    CData * GetLast();
};

Обратите внимание, что мы в наш класс ввели переменную m_pFirst типа CData *. Это указатель на первый элемент списка. Он же внутри себя (см. класс CData) содержит указатель на следующий и т. д.

А вот реализация конструктора и методов класса CList:

// Реализация методов класса списка.
CList::CList()
{
    m_pFirst = NULL;
}

void CList::Add(CData * pNext)
{
    // Ищем последний элемент в списке
    // и приписываем pNext к нему.

    // Если список не пуст.
    if(m_pFirst!=NULL)
    {
        GetLast()->m_pNext = pNext;
    }
    else
    {
        // Если список пуст, то
        // добавлем данные в начало списка.
        m_pFirst = pNext;
    }
}

CData * CList::GetLast()
{
    // Указатель на очередные данные в списке.
    CData * pCurr = m_pFirst;
    // Если список пуст, то возвращаем NULL.
    if(pCurr == NULL)
    {
        return NULL;
    }
    // Пока есть следующий элемент списка.
    while(pCurr->m_pNext!=NULL)
    {
        pCurr = pCurr->m_pNext;
    }
    return pCurr;
}

Как вы видите, в конструкторе мы просто обнуляем указатель на первый элемент списка (m_pFirst = NULL). Далее мы пишем метод Add, который добавляет передаваемые в параметре данные к списку. Добавляем мы новые данные в конец списка, который получаем методом GetLast, тело которого тоже приводится. Также обратите внимание на то, что мы особым образом перед добавлением или перед поиском последнего элемента в списке обрабатываем ситуацию, когда в списке вообще нет пока элементов.

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX new!
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
2002-2004 сайт progs.biz
2002-2004 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное