Стефан Дэвис - С++ для чайников .

Здесь есть возможность читать онлайн «Стефан Дэвис - С++ для чайников .» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Издательский дом Вильямс. Компьютерное издательство Диалектика, Жанр: Технические науки, Программирование, Программы, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

С++ для чайников .: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «С++ для чайников .»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

empty-line
1
empty-line
4

С++ для чайников . — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «С++ для чайников .», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

/* Работа с именами */

class Name

{

public :

Name( char* n = " " ) : name( n ) { }

_________________

312 стр. Часть 5. Полезные особенности

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 позволяет с одинаковой простотой работать как со встроенным типом, так и с пользовательским классом. Вот как выглядит пример работы данной программы.

Введите последовательность целых чисел для внесения в вектор отрицательное - фото 331

Введите последовательность целых чисел

для внесения в вектор ( отрицательное число

завершает ввод последовательности )

5

10

15

-1

Вы ввели следующие числа

0:5

1:10

2:15

Введите имена

('х' для завершения ):

Igor

Ira

Anton

x

Вы ввели имена

0: Igor

1: Ira

2 : Anton

Press any key to continue...

_________________

313 стр. Глава 27. Шаблоны С++

►Зачем нужны шаблоны классов...314

"Неужели я не могу просто создать класс Array ? — скажете вы. — Зачем мне возиться с шаблонами?"

Конечно, можете. Если заранее знаете, объекты какого типа будут храниться в этом массиве. Например, если вам нужен только массив целых чисел, то нет смысла ломать голову над шаблоном Vector< T > — проще создать класс IntArray и использовать его.

По сути единственной альтернативой шаблонам является использование void*, указателя, который может указывать на объекты любого типа. Этот способ использован в следующей программе.

/* VoidVector — реализация вектора с использованием */

/* void* для хранения элементов */

#include

#include

#include

using namespace std ;

typedef void* VoidPtr ;

class VoidVector

{

public:

VoidVector( int nArraySize )

{

/* Количество элементов */

/* Количество элементов */

nSize = nArraySize ;

ptr = new VoidPtr[ nArraySize ] ;

reset( ) ;

}

int size( ) { return nWriteIndex ; }

void reset( ) { nWriteIndex = 0 ; nReadIndex = 0 ; }

void add( void* pValue )

{

if ( nWriteIndex < nSize )

{

ptr[ nWriteIndex++ ] = pValue ;

_________________

314 стр. Часть 5. Полезные особенности

}

}

VoidPtr get( ){ return ptr[ nReadIndex++ ] ; }

protected :

int nSize ;

int nWriteIndex ;

int nReadIndex ;

VoidPtr* ptr ;

} ;

int main( int argc , char* pArgs[ ] )

{

setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */

/* Создание вектора */

VoidVector vv( 10 ) ;

/* Добавление значений к вектору */

cout << "Введите последовательность целых чисел\n"

"для внесения в вектор ( отрицательное\n"

"число завершает ввод последовательности )"

<< endl ;

for( ; ; )

{

int* p = new int ;

cin >> *p ;

if ( *p < 0 )

{

delete p ;

break ;

}

vv.add( ( void* ) p ) ;

}

cout << "\nВы ввели следующие числа" << endl ;

for ( int i = 0 ; i < vv.size( ) ; i++ )

{

int* p = ( int* )vv.get( ) ;

cout << i << ":" << *p << endl ;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «С++ для чайников .»

Представляем Вашему вниманию похожие книги на «С++ для чайников .» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «С++ для чайников .»

Обсуждение, отзывы о книге «С++ для чайников .» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x