Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 7
Текст из файла (страница 7)
Книга содержит полное описание С++, множество законченных примеров и еще большее количество фрагментов программ. Язык программирования С++ Благодарности С++ никогда не достиг бы необходимой зрелости без интенсивного использования, советов и конструктивной критики со стороны друзей и коллег. В частности, Того Сагй!11, Лш Сорйеп, бш Ге1йпап, Балду ггазег, Яече 3оЬпзоп, Впап Кегп!8Ьап, Ваг! !.осап!Ь1, Ропй Мс11гоу, Репи!з К5!сЬ!е, Еаггу Коз1ег, 7еггу БсЬвагх и 7оп Яюр!го подали важные для развития языка идеи. Раче Ргезог!о написал текущую реализацию библиотеки потокового ввода/вывода. Кроме того, сотни людей способствовали развитию язнка С++ и его компилятора, присылая мне свои предложения по улучшениям, описания проблем, с которыми они сталкивались, а также сообщения об ошибках компилятора. Я могу отметить здесь лишь некоторых: Оагу В!аЬор, Апг!гев Ншпе, Того Каяез, Ч!сгог М11еп!гоч!с, КоЬ Мппау, !.еоше Козе, Впап 8сЬпш11, и Оагу%а!йег.
Множество людей помогали с изданием данной книги. Среди них; Уоп Веп!!еу, !.апта Еачез, Впап Кегп18Ьап, Теб Кочга1з!г1, Яече МаЬапеу, 7оп Яюр!го и участники семинара по С++ в Ве1! !.аЬз, Со1щпЬпз, штат ОЬ!о (Огайо), 26-27 июня ! 985 года. Бьерн Страуструл Мюррей Хилл, Нью Джерси Введение Во введении представлен обзор основных концепций и свойств языка программирования С++ и его стандартной библиотеки.
Также поясняется структура книги и подход к изложению средств языка и методов их применения. Кроме того, во вводных главах дана базовая информация о языке С++, архитектуре и практике использования. Главы 1. Обрагцение к читателю 2. Обзор языка С++ 3. Обзор стандартной библиотеки «... и ты, Маркус, ты дал мне многое.
Теперь я дам тебе хороший совет. Будь многими Брось играть в бытие одним лишь Маркусом Кокоза. Ты так сильно волновался за Маркуса Кокоза, что стал его рабом и пленником. Ты не делал ничего, не подумав сначала о его благополучии и престиже. Ты всегда боялся того, что Маркус совершит какую-либо глупость или ему станет скучно. А что в этом страшного У Во всем мире люди совершают глупости. Я хочу, чтобы тыл жил легче. Будь больше, чем одним, будь многими людьми, столь многими, сколь можешь представить себе.ь — Карен Бликсен (Кагеп В11хеп) («Т)зе Пгеагпегзь из книги «Вечен СогЫс Та!еа», написанной под псевдонимом 1зак О(пезеп, Вапдогп Нопзе, 1пс © 1за)г П(пезеп, 1934, обновлено в 19б1) Обращение к читателю И молвил Морж: «Пришла пора поговорить о многом».
— Льюис Кэрролл Структура этой книги — как изучать С++ — структура С++ — эффективность и структура — философские замечания — исторические замечания — для чего используется С++ — С и С++ — рекомендации для программистов на С вЂ” рекомендации лля программистов на С++ — размышления о программировании на С++ — советы — ссылки.
1.1. Структура книги Книга состоит из шести частей; ° Введение: В главах 1 — 3 дается обзор языка С++, поддерживаемых им стилей программирования и стандартной библиотеки С++. ° Часть 1: В главах 4 — 9 изучаются встроенные типы языка С++ и базовые средства построения программ. ° Часть П: Главы !Π— 15 содержат учебный материал по обьектно-ориентированному и обобщенному программированию на С++. ° Часть 1И: В главах 16 — 22 представлена стандартная библиотека языка С++.
° Часть |У: В главах 23 — 25 рассматриваются проблемы, связанные с проектированием и разработкой программ. ° Приложения; Приложения А — Е содержат технические детали языка С++. В главе 1 дается обзор книги, рекомендации по ее чтению, а также общие сведения о языке и способах его применения. Вы можете бегло ознакомиться с ее содержимым, задержавшись лишь на интересных местах, а позднее вернуться к ней снова, после прочтения других частей данной книги. Главы 2 и 3 содержат обзор основных концепций и свойств языка С++ и его стандартной библиотеки. Цель этих глав — обратить ваше внимание на важность 38 Глава 1.
Обращение к читателю понимания фундаментальных концепций и базовых свойств языка, демонстрируя то, что может быть выражено полным набором языковых средств. По крайней мере, эти главы должны убедить читателя в том, что язык С++ — это не С, и что он прошел большой путь со времени первого и второго изданий этой книги. Глава 2 посвящена знакомству с высокоуровневыми чертами языка С++: поддержкой абстракции данных, объектно-ориентированным и обобщенным программированием. В главе 3 представлены базовые принципы и основные средства стандартной библиотеки. Это позволит мне применять стандартную библиотеку в последующих главах, а вам — использовать в упражнениях, вместо того, чтобы полагаться исключительно на встроенные низкоуровневые средства языка.
Вводные главы демонстрируют основной способ представления материала, принятый в данной книге: для того, чтобы обеспечить предметное и реалистичное изучение конкретного вопроса, я вначале коротко излагаю лишь основы концепции, а подробное и углубленное рассмотрение выполняю позже. Такой подход позволяет мне обращаться к конкретным примерам до того, как будут изучены все детали. Можно сказать, организация книги соответствует положению, что мы лучше обучаемся, если продвигаемся от конкретного к абстрактному — даже там, где абстрактные идеи кажутся в ретроспективе простыми и очевидными. В части 1 рассматривается подмножество С++, поддерживающее стили программирования, характерные лля языков С или Рааса!.
Эта часть книги охватывает фундаментальные типы, выражения и управляющие конструкции программ на С++. Модульность в той части, что поддерживается пространствами имен, исходными файлами и обработкой исключений, также рассматривается. Я предполагаю, что вы знакомы с фундаментальными основами программирования, излагаемыми в части 1. Поэтому, например, хоть я и рассматриваю рекурсию и итерацию в этой части !книги, я не трачу много времени на прояснение вопроса о реальной пользе этих концепций. Часть П посвящена средствам С++ для определения и использования новых типов. Здесь представлены (глава 10, глава 12) конкретные и абстрактные классы (интерфейсы), а также перегрузка операций (глава 11), полиморфизм и иерархии классов (глава 12, глава 15). В главе 13 представлены шаблоны, то есть средства для определения семейств типов и функций.
Она также демонстрирует способы создания контейнеров (например, списков) и приемы обобщенного программирования. В главе 14 рассматриваются обработка исключений, методы обработки ошибок и общая стратегия создания устойчивых и надежных программ. Я предполагаю, что вы или не слишком хорошо знакомы с объектно-ориентированным и обобщенным программированием, или вам не хватает подробных объяснений того, как именно эти базовые абстракции поддерживаются средствами языка С++.
Поэтому я рассматриваю не только сами абстракции, но также и технику их применения. В части !Ч эта тема развивается далее. Часть П1 посвящена стандартной библиотеке языка С++. В ней объясняется, как пользоваться библиотекой, каков ее дизайн и техника применения, а также показано, как расширить ее возможности. Библиотека предоставляет контейнеры (такие как!Ы, гесгог и гиар; глава 16, глава ! 7), стандартные алгоритмы (такие как югд 77пЫ и тиегяе; глава ! 8, глава 19), строки (глава 20), ввод/вывод (глава 21) и поддержку вычислений (глава 22). Часть!У затрагивает вопросы, актуальные для ситуаций, когда С++ используется в проектировании и реализации больших программных систем, В главе 23 рассматрива- 39 1 1.
Структура книги ются вопросы проектирования и управления ходом выполнения проектов. В главе 24 обсуждается связь между языком программирования и приемами проектирования. Глава 25 демонстрирует некоторые способы применения классов в проектировании. Приложение А содержит грамматику С++ с некоторыми комментариями. В приложении В обсуждается связь между С++ и С, а также между стандартным Сн-+ (называемым также (БО С++ или АХЯ С++) и предыдущими его версиями. В приложении С представлены некоторые технические детали языка С++. В приложении Р рассматриваются средства стандартной библиотеки, предназначенные для локализации программного обеспечения.
В приложении Е обсуждаются вопросы гарантии возбуждения исключений и соответствующие требования стандартной библиотеки. 1.1.1. Примеры и ссылки В данной книге акцент сделан скорее на организации программ, а не на реализации конкретных алгоритмов. Как следствие, я избегаю «слишком умных» или просто трудных для понимания алгоритмов.
Тривиальный алгоритм лучше подходит для иллюстрации языковых элементов или структуры программы. Например, я использую сортировку Шелла, тогда как в реальном коде лучше применить быструю сортировку. Часто в качестве упражнений предлагается переработать учебный код под более подходящий алгоритм. И, наконец, в реальной практике лучше использовать библиотечные функции вместо приведенного в книге иллюстративного кода. Учебные примеры неизбежно искажают представление о разработке программ, так как упрощение кода примеров одновременно приводит к исчезновению сложностей, связанных с масштабов проблем. Я не представляю другого способа почувствовать, что такое реальное программирование и каков в действительности язык программирования, иначе как в процессе практической реализации программных систем «настоящего размера>.