Д. Вандевурд, Н.М. Джосаттис - Шаблоны C++. Справочник разработчика (2003), страница 4
Описание файла
DJVU-файл из архива "Д. Вандевурд, Н.М. Джосаттис - Шаблоны C++. Справочник разработчика (2003)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр DJVU-файла онлайн
Распознанный текст из DJVU-файла, 4 - страница
Его кредо можно было бы выразить так: интуитивно понятное изложение материала и акцент на практических аспектах применения шаблонов. В какой-то степени у нас получился альянс ученого и инженера: мы оба имеем дело с одной и той же областью знаний, но сферы наших интересов несколько различны (хотя, разумеется, и имеют много общего).
Начало нашему сотрудничеству положило издательство Адсйзоп-%ез!еу, и сейчас перед вами результат этого сотрудничества. Нам хочется верить, что у нас получи- Глава 1. Об этой книге 22 лась основательная работа, сочетающая в себе тщательно проработанное учебное пособие по шаблонам и детальный справочник.
В качестве учебного пособия она охватывает не только введение в элементы языка, но и развитие понимания методов конструирования, лежащих в основе практических решений. Точно так же эта книга является не только детальным справочником по синтаксису и семантике шаблонов С++, но и кратким руководством по идиомам и технологиям языка — как широко известным, так и малознакомым. 1.1. Что необходимо знать, приступая к чтению этой книги Чтобы получить максимальную пользу от работы с книгой, читатель должен быть знаком с С++. В данной книге дается детальное описание конкретного средства языка программирования, но ие основ самого языка. Предполагается знакомство читателя с концепцией классов и наследования, а также умение писать программы на С++ с использованием таких компонентов, как потоки ввода-вывода и контейнеры из стандартной библиотеки С++. Кроме того, при необходимости в данной книге рассматриваются различные тонкие вопросы, которые могут не иметь прямого отношения к шаблонам.
Таким образом обеспечивается доступность изложенного здесь материала как для квалифицированных специалистов, так и для программистов среднего уровня. Изложение материала базируется на языке С++, соответствующем стандарту 1998 года 131], с учетом уточнений, приведенных в нервом списке технических опечаток Комитета по стандартизации С++ (С++ 81апбагб]га11оп Соплпрнее) [32].
Если вы чувствуете, что ваши знания основ С++ несколько устарели или отстали от современного уровня и их необходимо освежить, рекомендуем обратиться к дополнительным источникам информации, в частности 117, 18, 33]. В этих книгах содержится отличное введение в современный язык программирования С++ и его стандартную библиотеку. Кроме того, можно использовать публикации, перечисленные в библиографии.
1.2. Структура книги в целом Цель данной книги — предоставить читателю базовые знания, необходимые для работы с шаблонами и использования в полной мере их преимуществ; кроме того, книга призвана обеспечить читателей информацией, которая даст опытным программистам возможность преодолеть современные ограничения в этой области. Исходя из этого, мы разбили материал книги на четыре части.
° Часть 1, "Основы". Здесь описаны основные концепции, положенные в основу шаблонов. Эта часть написана в стиле учебника. 1.3. Как читать эту книгу 23 ° Часть П, "Углубленное изучение шаблонов". Здесь представлены детальные сведения о языке. Эта часть является неплохим справочником по конструкциям, связанным с шаблонами. ° Часть П1, "Шаблоны и конструирование". В этой части рассматриваются фундаментальные приемы конструирования, поддерживаемые шаблонами С++, простирающиеся от тривиальных идей до сложных идиом (возможно, нигде до этого не опубликованных). ° Часть 1Ч, "Нетрадиционное использование шаблонов". Основана на предшествующих ей двух частях и рассматривает различные распространенные применения шаблонов.
Каждая из перечисленных частей книги состоит из нескольких глав. Книга также включает несколько приложений, которые охватывают материал, относяшийся не только к шаблонам (например, вопросы перегрузки в С++). Главы, входяшие в состав первой части книги, требуют последовательного изучения. Например, глава 3 основана на материале, рассмотренном в главе 2. Однако в других частях книги связь между главами выражена не столь явно. Например, можно сначала проработать главу, посвященную функциям (глава 22, "Объекты-функции и обратные вызовы"), а уже потом приступать к чтению главы, посвяшенной интеллектуальным указателям (глава 20, "Интеллектуальные указатели").
1.3. Как читать эту книгу Если вы являетесь программистом на С++ и хотите получить общее представление о концепции шаблонов и поближе познакомиться с ней, то вам следует тшательно изучить часть 1, "Основы". С этим материалом имеет смысл хотя бы бегло ознакомиться даже тем, кто с шаблонами уже "на ты", чтобы прочувствовшь стиль и освоиться с используемой в книге терминологией. Эта часть также охватывает некоторые "материально-технические" аспекты, касающиеся организации исходного кода, содержащего шаблоны.
В зависимости от того, какой метод изучения материала вы предпочитаете, можно либо основательно изучить детальную информацию о шаблонах из части 1, либо познакомиться с приемами практического программирования в части 1П (обрашаясь к части П, если возникнут какие-либо вопросы). Последнее представляется особенно целесообразным в случае, если вы приобрели эту книгу для конкретных практических целей. Часть !Ч во многом подобна части 1П, но акцент в ней делается не на приемах конструирования, а на понимании роли шаблонов в конкретных приложениях.
Следовательно, прежде чем приступать к изучению части 1Ч, имеет смысл сначала ознакомиться с материалом, изложенным в части П1. Приложения содержат большое количество полезной информации, на которую сделано много ссылок в основной части книги. Кроме того, мы старались сделать их интереснымн и в качестве самостоятельного материала. Опыт подсказывает, что лучше всего новые знания усваиваются на примерах. Поэтому в книге вы найдете большое количество примеров. Иногда это всего лишь несколько 24 Глава 1.
Об этой книге строк кода, иллюстрирующих теоретическое положение, иногда — полноценные программы, реализующие конкретное применение материала. В последнем случае примеры снабжены комментариями С++ с описанием пути к файлу, в котором содержится код программы. Все эти файлы можно найти на %еЬ-узле данной книги по адресу: Ьсср://мни.Зовцссйв.сом/смр1Ьоо)с/. 1.4. Некоторые замечания о стиле программирования У каждого программиста на С++ свой стиль программирования, и авторы данной книги также не составляют исключения. Понятие стиля включает обычные вопросы: где помешать пробелы, разделители (скобки, фигурные скобки) и т.п. В целом мы старались придерживаться единого стиля, хотя иногда по ходу изложения приходилось делать исключения.
Например, чтобы придать колу больше нагшшности, в разделах руководства были широко использованы пробелы и осмысленные имена, в то время как при рассмотрении более сложных вопросов предпочтение отдавалось компактности. Хотелось бы обратить внимание читателя на то, что в данной книге применяется несколько необычный подход к записи объявлений типов, параметров и переменных. Очевидно, что при объявлении возможно использование нескольких стилей: уо1с хоо(сопле йпс ах) у 1а ~ (с вс йпса к); уо1с) хоо (йпг сопит ах); чоЫ Йоо (1пе сопвсй х) > Для обозначения целочисленной константы мы решили применять несколько непривычный порядок записи — йпс сопвс вместо сопле 1пш Сделано это было по двум причинам.
Во-первых, такой порядок обеспечивает более очевидный ответ на вопрос: "Что именно является константой?". "Что" — зто всегда то, что находится перед модификатором содвс. Однако для выражения 1пс* сопле Ьоо)смак)с; // Указатель не может изменяться, // однако может изменяться // значение, на которое он указывает не существует эквивалентной формы, в которой модификатор сопле стоял бы перед оператором указателя *, хотя сопит йпп )Я = 100у эквивалентно 1ПС СОПВС )з = 100> В этом примере константои является сам указатель, а не целочисленное значение, на которое он указывает.
25 1.4. Некоторые замечания о стиле программирования Вторая причина связана с синтаксической подстановкой, часто встречающейся при работе с шаблонами. Рассмотрим два следующих определения типов: К Гурейей сЬаг* СНАКЯ; Гурейей СНАКЯ сопзс СРТйл // Константный указатель на сЬаг Если вместо СНАКЯ буквально подставить его значение, то смысл второго объявления не изменится: Гурейей сЬаг* сопзс СРТК; // Константный указатель на сЬаг Однако при обратном порядке записи, т.е. если сопвг стоит неред именем определяемого типа, этот принцип неприменим. Рассмотрим вариант определений, альтернативный представленным выше определениям типа: Гурейеб сЬаг* СНАКЯ; Гурейей сопзс СНАКЯ СРТК; //Константный указатель на сЬаг В результате буквальной подстановки значения СНАКЯ получается другой тип: Сурейеб сопзг сЬаг* СРТК; // Указатель на константу сЬаг Очевидно, что сказанное выше справедливо и для спецификатора чо1аг11е.
Что касается расстановки пробелов, то мы решили помещать пробел между амперсандом и именем параметра: уо1й йоо(1пг сопиев х); Это сделано для того, чтобы подчеркнуть разделение между типом параметра и именем параметра. Однако при такой записи еще более запутанными становятся объявления наподобие сЬаг* а, Ь; Здесь согласно правилам, унаследованным из С, а является указателем, а Ь вЂ” обычной символьной переменной. Чтобы исключить такого рода путаницу, мы просто стараемся избегать обьявления нескольких переменных приведенным образом. Данная книга не посвящена стандартной библиотеке С++, однако в ряде приведенных в ней примеров зта библиотека задействована. В общем случае мы используем заголовочные файлы С++ (например, <йозсгеаза>, а не <всййо.