pNDS -> szName[ 127 ] = '\0' ;
pNDS -> pNext = 0 ;
/* Возврат адреса созданного объекта */
return pNDS ;
}
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
cout << "Читаем имена студентов\n"
<< "Введите 'exit' для выхода\n" ;
/* Создание объекта NameDataSet */
NameDataSet* pNDS ;
while ( pNDS = getData( ) )
{
/* Добавление в конец списка */
add( pNDS ) ;
}
/* Итерация списка для вывода записей */
cout << "Записи:\n" ;
pNDS = pHead ;
while ( pNDS )
{
/* Вывод текущей записи */
cout << pNDS -> szName << "\n" ;
/* Получение следующей записи */
pNDS = pNDS -> pNext ;
}
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
Несмотря на внушительную длину, программа LinkedListData относительно проста. Функция main( ) начинается с вызова функции getData( ), которая считывает элемент NameDataSet с клавиатуры. Если пользователь вводит строку "exit", getData( ) возвращает нуль. Функция main( ) вызывает функцию add( ), чтобы добавить элемент, который вернула getData( ), в конец связанного списка.
_________________
179 стр. Глава 14. Указатели на объекты
Если от пользователя больше не поступает элементов NameDataSet, функция main( ) выводит на экран все элементы списка, используя функцию displayData( ).
Функция getData( ) выделяет из кучи пустой объект класса NameDataSet. После этого getData( ) ожидает ввода имени для записи его в соответствующее поле нового объекта. Если пользователь вводит в поле имени строку "exit", функция уничтожает последний созданный объект и возвращает 0. В противном случае getData( ) считывает фамилию и номер социального страхования, после чего обнуляет указатель pNext и передаёт управление вызывающей функции.
«Никогда не оставляйте связывающие указатели не проинициализированными! Старая поговорка программистов гласит: "Не уверен — обнули".»
[Помни!]
Функция getData( ) возвращает адрес объекта.
Каждый объект, который возвращает функция getData( ), добавляется в начало списка, на который указывает глобальная переменная-указатель pHead. Когда функция getData( ) возвращает нулевое значение, происходит выход из цикла while, после чего в следующем цикле while осуществляется проход по списку с выводом информации о каждом элементе списка. По достижении последнего элемента списка происходит выход из второго цикла while и программа завершает работу.
«Вывод программы представляет собой введённые имена в обратном порядке. Это происходит потому, что добавление элементов выполняется в начало списка. Возможна вставка элементов в конец списка, однако эта задача посложнее.»
[Советы]
►Списки в стандартной библиотеке...180
Точно так, как ребёнок должен научиться ходить перед тем как ездить на автомобиле, считать перед тем как использовать калькулятор, программисту необходимо научиться писать программы, работающие со связанными списками, перед тем как использовать классы списков, написанные другими. В главе 28, "Стандартная библиотека шаблонов", будут описаны классы-контейнеры, предоставляемые в распоряжение программиста средами С++, среди которых есть и класс, представляющий собой связанный список.
_________________
180 стр. Часть 3. Введение в классы
Глава 15. ЗАЩИЩЁННЫЕ ЧЛЕНЫ КЛАССА: НЕ БЕСПОКОИТЬ!...181ОГЛАВЛЕНИЕ
В этой главе...
►Защищённые члены 181
►Чем хороши защищённые члены 183
►Обращение к защищённым членам 184