Язык программирования C++. Базовый курс, 5-е издание

Язык программирования C++. Базовый курс, 5-е издание
Автор: Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му
Год: 2014
ISBN: 978-5-8459-1839-0
Страниц: 1120
Язык: Русский
Формат: PDF
Размер: 51 Мб

Download

Книга “Язык программирования C++. Базовый курс” (5-е издание) – лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт C++11!

Книга “Язык программирования C++. Базовый курс” – новое издание популярного и исчерпывающего бестселлера по языку программирования C++, которое было полностью пересмотрено и обновлено под стандарт C++11. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.

С самого начала книги “Язык программирования C++. Базовый курс” читатель знакомится со стандартной библиотекой C++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Книга “Язык программирования C++. Базовый курс” – не только проверенное руководство для новичков в C++, она содержит также авторитетное обсуждение базовых концепций и методик языка C++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях C++11.
Начни быстрей и достигни большего.
Узнайте, как использовать новые средства языка C++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
Изучите рациональное зерно: почему язык C++11 работает именно так
Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть.
Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
Освойте лучшие методики программирования и закрепите на практике изученный материал.

+

Благодаря предыдущим изданиям книги язык C++ изучило множество программистов. За истекшее время язык C++ претерпел существенные усовершенствования, а основное внимание сообщества программистов переместилось главным образом с эффективности использования аппаратных средств к эффективности программирования.

В 2011 году комитет по стандартам C++ выпустил новую основную версию стандарта ISO C++. Этот пересмотренный стандарт является последним этапом развития языка C++, его основное внимание уделено эффективности программирования. Основные задачи нового стандарта таковы.

  • Сделать язык более единообразным, упростить его преподавание и изучение.
  • Упростить, обезопасить и повысить эффективность использования стандартных библиотек.
  • Облегчить написание эффективных абстракций и библиотек.

Это издание книги полностью пересмотрено так, чтобы использовать последний стандарт языка. Просмотрев раздел “Новые средства С++11” после оглавления, вы можете получить представление о том, насколько сильно новый стандарт повлиял на язык C++. Там перечислены только те разделы, в которых рассматривается новый материал.

Некоторые из нововведений в новом стандарте, такие как ключевое слово auto для выведения типов, весьма распространены. Эти средства существенно облегчают чтение кода в данном издании и делают его понятней. Программисты, конечно, могут игнорировать те средства, которые облегчают концентрацию на том, что программа призвана делать. Другие новшества, такие как интеллектуальные указатели и контейнеры с поддержкой перемещения, позволяют писать более сложные классы без необходимости справляться со сложностями управления ресурсами. В результате мы можем начать изучение сложностями управления ресурсами. Б результате мы можем начать изучение создания собственных классов намного раньше, чем в предыдущем издании. Мы (и вы) больше не должны волноваться о большинстве деталей, которые стояли на нашем пути в предыдущем стандарте.

C++11
Этой пиктограммой отмечены места, в которых рассматриваются средства, определенные новым стандартом. Надеемся, что читатели, которые уже знакомы с ядром языка C++, найдут эти отметки полезными при решении, на чем сосредоточить внимание. Мы также ожидаем, что эти пиктограммы помогут объяснить сообщения об ошибках тех компиляторов, которые могут еще не поддерживать все новые средства. Хотя практически все примеры этой книги были откомпилированы на текущем выпуске компилятора GNU, мы понимаем, что у некоторых читателей еще не будет новейшего компилятора. Даже при том, что по последнему стандарту было добавлено множество возможностей, базовый язык остается неизменным и формирует основной объем материала, который мы рассматриваем.

Для кого написана эта книга

Можно считать, что современный язык C++ состоит из трех частей.

  • Низкоуровневый язык, большая часть которого унаследована от языка С.
  • Дополнительные возможности языка, позволяющие определять собствен­ные типы данных, организовать крупномасштабные программы исистемы.
  • Стандартная библиотека, использующая эти дополнительные возмож­ности для обеспечения набора структур данных и алгоритмов.

В большинстве книг язык C++ представлен в порядке его развития. Сначала они знакомят с частью С в языке C++, а в конце книги представляются более абстрактные средства C++ как дополнительные возможности. У этого подхода есть две проблемы: читатели могут увязнуть в подробностях, унаследованных от низкоуровневого программирования, и сдаться. Те же, кто будет упорство­вать в изучении, наживут плохие привычки, от которых впоследствии придет­ся избавляться.

Мы придерживаемся противоположного подхода: с самого начала использу­ем средства, которые позволяют программистам игнорировать детали, унасле­дованные от низкоуровневого программирования. Например, мы вводим и ис­пользуем библиотечные типы string и vector наряду со встроенными цифро­выми типами и массивами. Программы, которые используют эти библиотечные типы, проще писать, проще понимать, и ошибок в них много меньше.

Слишком часто библиотеки преподносят как “дополнительную” тему. Вме­сто того чтобы использовать библиотеки, во многих книгах используют низко­уровневые способы программирования с использованием указателей на сим­вольные массивы и динамического управления памятью. Заставить правильно работать программы, которые используют эти низкоуровневые подходы, куда труднее, чем написать соответствующий код C++, используя библиотеку.

Повсюду в этой книге мы демонстрируем хороший стиль программирова­ния: мы хотим помочь вам выработать хорошие привычки сразу и избежать борьбы с плохими привычками впоследствии, когда вы получите более слож­ные навыки. Мы подчеркиваем особенно сложные моменты и предупреждаем о наиболее распространенных заблуждениях и проблемах.

Мы также объясняем причины, по которым были введены те или иные пра­вила, а не просто принимаем их как данность. Мы полагаем, что понимание причин поможет читателю быстрей овладеть возможностями языка.

Хотя для изучения этой книги знание языка С необязательно, мы подразу­меваем, что вы знакомы с программированием достаточно, чтобы написать, откомпилировать и запустить программу хотя бы на одном из современных языков. В частности, мы подразумеваем, что вы умеете использовать перемен­ные, создавать и вызывать функции, а также использовать компилятор.

Структура книги

Мы начинаем с рассмотрения основ языка и библиотеки в частях I и II. Эти части содержат достаточно материала, чтобы позволить читателю писать ра­ботоспособные программы. Большинство программистов C++ должны знать все, что описано в этих частях.

Кроме обучения основам языка C++, материал частей I и II служит и другой важной цели: при использовании абстрактных средств, определенных библиоте­кой, вы научитесь использовать методики высокоуровневого программирования. Библиотечные средства сами являются абстрактными типами данных, которые обычно пишут на языке C++. Библиотека может быть создана с использованием тех же средств построения класса, которые доступны для любого программиста C++. Наш опыт в обучении языку C++ свидетельствует о том, что, если читатели с самого начала используют хорошо разработанные абстрактные типы, то впоследствии им проще понять, как создавать собственные типы.

Только после полного освоения основ использования библиотеки (и напи­сания разных абстрактных программ при помощи библиотеки) мы переходим к тем средствам языка C++, которые позволяют писать собственные абстрак­ции. В частях III и IV главное внимание уделяется написанию абстракции в форме классов. В части III рассматриваются общие принципы, а в части IV — специализированные средства.

В части III мы рассматриваем проблемы управления копированием, а также другие способы создания классов, которые так же удобны, как и встроенные типы. Классы — это основа объектно-ориентированного и обобщенного про­граммирования, которое также будет рассмотрено в части III. Книга заканчи­вается частью IV, рассматривающей средства, обычно используемые в боль­ших и сложных системах. В приложении А приведено краткое описание биб­лиотечных алгоритмов.

Эта глава знакомит с большинством фундаментальных элементов языка C++: типами, переменными, выражениями, операторами и функциями. Кроме того, здесь кратко описано, как откомпилировать программу и запустить ее на вы­полнение.

Изучив эту главу и выполнив соответствующие упражнения, читатель будет способен написать, откомпилировать и запустить на выполнение простую про­грамму. Последующие главы подразумевают, что вы в состоянии использовать описанные в данной главе средства и рассматривают их более подробно.

Лучше всего изучать новый язык программирования в процессе написа­ния программ. В этой главе мы напишем простую программу для книжного магазина.

Книжный магазин хранит файл транзакций, каждая из записей которого соответствует продаже одного или нескольких экземпляров определенной книги. Каждая транзакция содержит три элемента данных:

0-201-70353-Х 4 24.99

Первый элемент — это ISBN (International Standard Book Number— меж­дународный стандартный номер книги), второй — количество проданных эк­земпляров, последний — цена, по которой был продан каждый из этих экзем­пляров. Владелец книжного магазина время от времени просматривает этот файл и вычисляет для каждой книги количество проданных экземпляров, об­щий доход от этой книги и ее среднюю цену.

Чтобы написать эту программу, необходимо рассмотреть несколько эле­ментарных средств языка C++. Кроме того, следует знать, как откомпилиро­вать и запустить программу.

Хотя мы еще не разработали свою программу, несложно предположить, что для этого необходимо следующее.

  • Определить переменные.
  • Обеспечить ввод и вывод.
  • Применить структуру для содержания данных.
  • Проверить, нет ли двух записей с одинаковым ISBN.
  • Использовать цикл для обработки каждой записи в файле транзакций.

Сначала рассмотрим, как эти задачи решаются средствами языка C++,а за­тем напишем нашу программу для книжного магазина.

Эта глава содержит достаточно информации о языке C++,чтобы позволить писать, компилировать и запускать простые программы. Здесь было описано, как определить функцию main (), которую вызывает операционная система при запуске программы. Также было продемонстрировано, как определить переменные, организовать ввод и вывод данных, использовать операторы if, for и while. Глава завершается описанием наиболее фундаментального эле­мента языка C++ — класса. Здесь было продемонстрировано создание и применение объектов классов, которые были созданы кем-то другим. Определе­ние собственных классов будет описано в следующих главах.

Все широко распространенные языки программирования предоставляют единый набор средств, отличающийся лишь специфическими подробностями
конкретного языка. Понимание подробностей того, как язык предоставляет эти средства, является первым шагом к овладению данным языком. К наибо­лее фундаментальным из этих общих средств относятся приведенные ниже.

  • Встроенные типы данных (например, целые числа, символы и т.д.).
  • Переменные, позволяющие присваивать имена используемым объектам.
  • Выражения и операторы, позволяющие манипулировать значениями этих типов.
  • Управляющие структуры, такие как if или while, обеспечивающие ус­ловное и циклическое выполнение наборов действий.
  • Функции, позволяющие обратиться к именованным блокам действий.

Большинство языков программирования дополняет эти основные средства двумя способами: они позволяют программистам дополнять язык, определяя собственные типы, а также использовать библиотеки, в которых определены полезные функции и типы, отсутствующие в базовом языке.

В языке C++, как и в большинстве языков программирования, допустимые для объекта операции определяет его тип. То есть оператор будет допустимым или недопустимым в зависимости от типа используемого объекта. Некоторые языки, например Smalltalk и Python, проверяют используемые в выражениях типы во время выполнения программы. В отличие от них, язык C++ осуществ­ляет контроль типов данных статически, т.е. соответствие типов проверяется во время компиляции. Как следствие, компилятор требует сообщить ему тип каж­дого используемого в программе имени, прежде чем оно будет применено.

Язык C++ предоставляет набор встроенных типов данных, операторы для манипулирования ими и небольшой набор операторов для управления про­цессом выполнения программы. Эти элементы формируют алфавит, при по­мощи которого можно написать (и было написано) множество больших и сложных реальных систем. На этом базовом уровне язык C++ довольно прост. Его потрясающая мощь является результатом поддержки механизмов, которые позволяют программисту самостоятельно определять новые структу­ры данных. Используя эти средства, программисты могут приспособить язык для собственных целей без участия его разработчиков и необходимости ожидать, пока они удовлетворят появившиеся потребности.

Возможно, важнейшим компонентом языка C++ является класс, который позволяет программистам определять собственные типы данных. В языке C++ такие типы иногда называют “типами класса”, чтобы отличить их от базовых типов, встроенных в сам язык. Некоторые языки программирования позволя­ют определять типы, способные содержать только данные. Другие, подобно языку C++, позволяют определять типы, в состав которых можно включить операции, выполняемые с этими данными. Одна из главных задач проекта C++ заключалась в предоставлении программистам возможности самостоя­тельно определять типы данных, которые будут так же удобны, как и встроен­ные. Стандартная библиотека языка C++ использует эту возможность для реализации обширного набора классов и связанных с ними функций.

Первым шагом по овладению языком C++ является изучение его основ и библиотеки — такова тема части I, “Основы”. В главе 2 рассматриваются встроенные типы данных, а также обсуждается механизм определения новых, собственных типов. В главе 3 описаны два фундаментальных библиотечных типа: string (строка) и vector (вектор). В этой же главе рассматриваются массивы, представляющие собой низкоуровневую структуру данных, встро­енную в язык C++,и множество других языков. Главы 4-6 посвящены выраже­ниям, операторам и функциям. Завершается часть главой 7 демонстрирую­щей основы построения собственных типов классов. Как мы увидим, в опреде­лении собственных типов примиряется все, что мы изучили до сих пор, поскольку написание класса подразумевает использование всех средств, час­тично раскрытых в части I.