Читать «С++ для "чайников" .» онлайн - страница 212
Стефан Рэнди Дэвис
{
setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */
intFn( ) ;
nameFn( ) ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
/* Работа с целыми числами */
void intFn( )
{
/* Создание вектора */
TemplateVector< int > integers( 10 ) ;
/* Добавляем значения в вектор */
cout << "Введите последовательность целых чисел\n"
"для внесения в вектор ( отрицательное\n"
"число завершает ввод последовательности )"
<< endl ;
for ( ; ; )
{
int n ;
cin >> n ;
if ( n < 0 ) { break ; }
integers.add( n ) ;
}
cout << "\nВы ввели следующие числа" << endl ;
for ( int i = 0 ; i < integers.size( ) ; i++ )
{
cout << i << ":" << integers.get( ) << endl ;
}
}
/* Работа с именами */
class Name
{
public :
Name( char* n = " " ) : name( n ) { }
_________________
312 стр. . Полезные особенности
string display( ) { return name ; }
protected :
string name ;
} ;
void nameFn( )
{
/* Создание вектора */
TemplateVector< Name > names( 10 ) ;
/* Добавление значений в вектор */
cout << "Введите имена\n"
<< "('х' для завершения ):" << endl ;
for ( ; ; )
{
char buffer[ 80 ] ;
do
{
cin.getline( buffer , 80 ) ;
} while ( strlen( buffer ) == 0 ) ;
if ( stricmp( buffer , "x" ) == 0 )
{
break ;
}
names.add( Name( buffer ) ) ;
}
cout << "\nВы ввели имена" << endl ;
for ( int i = 0 ; i < names.size( ) ; i++ )
{
Name name = names.get( ) ;
cout << i << ":" << name.display( ) << endl ;
}
}
Шаблон класса TemplateVector< T > содержит массив объектов класса Т. Шаблон класса имеет две функции-члена: add( ) и get( ). Первая из них добавляет объект типа Т в очередное пустое место массива, а вторая — возвращает следующий элемент из массива.
Приведённая программа инстанцирует этот шаблон сначала для типа int. а затем для пользовательского класса Name.
Функция intFn( ) создаёт вектор целых чисел с 10 элементами, после чего считывает вводимые пользователем числа в вектор, а потом выводит их на экран, используя функции, предоставляемые шаблоном TemplateVector.
Вторая функция, nameFn( ), создаёт вектор объектов типа Name. Функция так же размещает пользовательский ввод в векторе, а потом выводит его элементы на экран.
Обратите внимание, как шаблон TemplateVector позволяет с одинаковой простотой работать как со встроенным типом, так и с пользовательским классом. Вот как выглядит пример работы данной программы.