Разное

Программирование с учебник – Учебники по программированию – скачать бесплатно в epub, fb2, rtf, mobi, pdf или читать онлайн

Читать онлайн Программирование — Страница 1. Читать бесплатно на online-knigi.com

Читать книгу О книге

С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C.

Эта книга предназначена главным образом для того, чтобы помочь серьезным программистам изучить язык и применять его в нетривиальных проектах. В ней дано полное описание С++, много примеров и еще больше фрагментов программ.

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

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

. Профессия программиста сейчас востребована и хорошо оплачиваемая. Сложная ли это наука программирование?

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

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

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

Что такое программирование?

Говоря простым языком, это создание компьютерных программ или приложений. Текст для компьютеров создаётся таким образом, чтобы машине было легко понять и выполнять поставленные задачи. Самые простые программы содержат около ста строк закодированного текста.

Сложные приложения вмещают до миллиарда строк кода. Теперь возникает вопрос, что же такое компьютерный код? Это текст, состоящий из цифр, слов и дополнительных символов, с помощью которых компьютер последовательно выполняет операции.

Если программа выполнена качественно, то и работает компьютер соответственно быстро и чётко. Однако со временем в любой программе наступает сбой, разработчикам в этом случае приходится искать ошибки, называемые багами.

Язык программирования бывает разным. Конечно, он отличается от человеческой речи. К примеру, самый популярный компьютерный язык — это JavaScript. Он запускается в любом браузере и имеет ряд преимуществ в парадигмах.

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

Хорошее знание компьютерного языка, то есть умение описывать пошагово все процессы, непременно приведёт вас к успеху!

Какие книги по программированию можно прочитать на нашем сайте?

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

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

Для разработки «чистого кода» нужно для начала научиться отличать хороший код от плохого. Роберт Мартин создал этот самый «чистый код» на своём личном опыте и делится своими знаниями с другими программистами, приводя практические сценарии. Книга будет полезной для новичков в области программирования.

online-knigi.com

Учебник C#

Глава 1. Первый взгляд на платформу .NET 8
Объектно-ориентированное программирование 11
Классы 13
CpeAaVisualStudio.NET 14
Рекомендации по программированию 21

Глава 2. Основные понятия языка 22
Состав языка 22
Типы данных 31
Рекомендации по программированию 36

Глава 3. Переменные, операции и выражения 38
Переменные 38
Именованные константы 41
Операции и выражения 42
Линейные программы 59
Рекомендации по программированию 67

Глава 4. Операторы 69
Выражения, блоки и пустые операторы 70
Операторы ветвления 70
Операторы цикла 75
Базовые конструкции структурного программирования 87
Обработка исключительных ситуаций 89
Операторы checked и unchecked 95
Рекомендации по программированию 95

Глава 5. Классы: основные понятия 100
Присваивание и сравнение объектов 103
Данные: поля и константы 104
Методы 106
Ключевое слово this 114
Конструкторы 114
Свойства 120
Рекомендации по программированию 124

Глава 6. Массивы и строки 126
Массивы 126
Оператор foreach 136
Массивы объектов 138
Символы и строки 139
Класс Random 148
Рекомендации по программированию 150

Глава 7. Классы: подробности 152
Перегрузка методов 152
Рекурсивные методы 153
Методы с переменным количеством аргументов 154
Метод Main 156
Индексаторы 157
Операции класса 161
Деструкторы 169
Вложенные типы 169
Рекомендации по программированию 170

Глава 8. Иерархии классов 172
Наследование 172
Виртуальные методы 178
Абстрактные классы 181
Бесплодные классы 182
Класс object 183
Рекомендации по программированию 186

Глава 9. Интерфейсы и структурные типы 188
Синтаксис интерфейса 188
Реализация интерфейса 190
Работа с объектами через интерфейсы. Операции is и as 194
Интерфейсы и наследование 195
Стандартные интерфейсы .NET 198
Структуры 212
Перечисления 215
Рекомендации по программированию 219

Глава 10. Делегаты, события и потоки выполнения 220
Делегаты 220
События 232
Многопоточные приложения 237
Рекомендации по программированию 245

Глава 11. Работа с файлами 246
Потоки байтов 250
Асинхронный ввод-вывод 253
Потоки символов 255
Двоичные потоки 260
Консольный ввод-вывод 262
Работа с каталогами и файлами 263
Сохранение объектов (сериализация) 267
Рекомендации по программированию 270

Глава 12. Сборки, библиотеки, атрибуты, директивы 272
Сборки 272
Создание библиотеки 275
Использование библиотеки 278

Рефлексия 279
Атрибуты 283
Пространства имен 285
Директивы препроцессора 287
Рекомендации по программированию 290

Глава 13. Структуры данных, коллекции и классы-прототипы 291
Абстрактные структуры данных 291
Пространство имен System.Collections 295
Классы-прототипы 299
Частичные типы 308
Обнуляемые типы 309
Рекомендации по программированию 310

Глава 14. Введение в программирование под Windows 311
Событийно-управляемое программирование 312
Шаблон Windows-приложения 314
Класс Control 323
Элементы управления 325
Предварительные замечания о формах 337
Класс Form 338
Диалоговые окна 339
Класс Application 342
Краткое введение в графику 344
Рекомендации по программированию 346

Глава 15. Дополнительные средства C# 347
Небезопасный код 347
Регулярные выражения 355
Документирование в формате XML 365
Темы, не рассмотренные в книге 366

Заключение 369

Лабораторные работы 370
Лабораторная работа 1. Линейные программы 370
Лабораторная работа 2. Разветвляющиеся вычислительные процессы 371
Лабораторная работа 3. Организация циклов 379
Лабораторная работа 4. Простейшие классы 381
Лабораторная работа 5. Одномерные массивы 385
Лабораторная работа 6. Двумерные массивы 389
Лабораторная работа 7. Строки 393
Лабораторная работа 8. Классы и Операции 395
Лабораторная работа 9. Наследование 400
Лабораторная работа 10. Структуры 405
Лабораторная работа 11. Интерфейсы и параметризованные коллекции 411
Лабораторная работа 12. Создание Windows-приложений 412
Спецификаторы формата для строк C# 423
Список технической литературы 425
Алфавитный указатель 427

www.htbook.ru

Книга «Теория и практика языков программирования. Учебник для вузов. 2-е изд. Стандарт 3-го поколения»

Учебник посвящен систематическому изложению теории и практики языков программирования. Он отражает классическое содержание учебной дисциплины по языкам программирования. Все сложные вопросы поясняются законченными примерами. Кроме того, здесь предлагается полный комплекс задач и упражнений по узловым вопросам. Учебник охватывает базисные разделы следующих дисциплин: теория формальных языков, теория автоматов и формальных языков, языки программирования, программирование, объектно-ориентированное программирование, логическое и функциональное программирование, теория вычислительных процессов.

В новом издании обсуждаются характеристики, а также последние тенденции развития универсальных языков программирования высокого уровня, таких как Scala, Go и Swift; поясняются главные особенности последних стандартов классических языков C++, Java и C#: лямбда-выражения во всех этих языках, cсылочный тип rvalue и семантика перемещения в языке C++ 11, ковариантность и контрвариантность родовых шаблонов в C#; существенно расширено представление скриптового языка Ruby, рассматриваются его блоки, механизмы единичного наследования и подмешивания, а также утиной типизации; добавлено описание аппарата событий и программирования на основе событий; показано применение стиля функционального программирования в скриптовых и объектно-ориентированных языках Python, Ruby, C#, Java, C++, Scala, Go и Swift.

Отрывок из книги. Язык Scala


Язык был создан в Швейцарской политехнической школе Лозанны (2004 год, главный автор — Мартин Одерски). Он стал результатом исследований, направленных на разработку улучшенной языковой поддержки компонентного ПО. За основу были взяты две идеи:

• Язык для программирования компонентного ПО должен быть масштабируемым (должна обеспечиваться возможность с помощью одних и тех же концепций описывать как малые, так и большие фрагменты программ). Поэтому внимание было сконцентрировано на механизмах абстракции, композиции и декомпозиции, а не на введении большого количества конструкций, которые могут быть полезными только на каком-то одном уровне масштабирования.

• Масштабируемая поддержка компонентов обеспечивается языком, объединяющим как объектно-ориентированное, так и функциональное программирование. Некоторые из базовых новшеств Scala представляют собой концепции, являющиеся сплавом этих парадигм программирования. В статически типизированных языках, к которым относится Scala, данные парадигмы до сих пор были полностью разделены.

Scala была выпущена для использования на платформе JVM в январе 2004 года и на платформе .NET в июне 2004 года. Кроме того, в настоящее время активно разрабатывается целый ряд Scala-компиляторов.

Таким образом, Scala — это мультипарадигменный язык со строгой типизацией, который поддерживает функциональное, объектно-ориентированное и параллельное программирование. Предназначен для реализации на вершине виртуальной машины Java и частично мотивирован известными недостатками языка Java. Обеспечивает наиболее агрессивную интеграцию функциональных характеристик в императивный язык. Имеет функции первого класса и высшего порядка, механизм логического вывода локального типа, отложенные (ленивые) вычисления, сопоставление с образцом, карризацию, хвостовую рекурсию, развитые родовые средства (с ковариантностью и контрвариантностью), параллелизм на основе сообщений, наследование на основе трейтов (что-то среднее между классами и интерфейсами). Энергично используется как в промышленности, так и в науке. Развитие финансируется Европейским исследовательским советом.

В Scala используется чистая объектно-ориентированная модель, похожая на применяемую в Smalltalk: каждое значение является объектом (и числа, и результаты функций), а каждая операция — это отправка сообщения, вызов метода объекта. Например, сложение 2 + 3 интерпретируется как 2.+(3), то есть как вызов в объектеприемнике «2» метода «+» с аргументом «3». Здесь в качестве объекта-источника рассматривается число 3. Этим Scala отличается от Java, поскольку в Java разделены примитивные типы (например, boolean или int) и ссылочные типы, а также нет возможности работать с функциями как со значениями.

Конечно, Java-программисты сильно удивятся тому, что в Scala функции также являются объектами. Тем не менее в Scala функцию можно передавать как аргумент, сохранять в качестве переменной или возвращать из другой функции. Такая возможность манипулировать функциями как обычными переменными является краеугольным камнем функционального программирования, суть которого состоит в работе функций с неизменяемыми переменными.

Перед определением функции ставится ключевое слово def. Определения классов начинаются с зарезервированного слова class. Класс может предотвратить дальнейшее создание подклассов, употребляя зарезервированное слово final. Подобно объектно-ориентированным языкам C++, Java, C#, экземпляр класса может ссылаться на себя, используя слово this. Scala допускает перегруженные методы. Как и в Java, ключевое слово extend объявляет, что класс является подклассом другого класса. Scala не поддерживает множественное наследование. Вместо этого язык применяет смешанное наследование на базе трейтов, обеспечивающих включения общих атрибутов и методов в несколько подклассов. Трейты могут расширять классы или другие трейты. Подкласс в Scala может наследовать методы как от родительского класса, так и от трейтов. Трейты могут также иметь отношения с родительским классом и подклассом. Объявление трейта начинается с ключевого слова trait. Тело трейта выполняется, когда создается экземпляр класса, задействующего этот трейт. Родительским по умолчанию для класса или трейта является класс AnyRef, прямой потомок класса Any.

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

Правила видимости в Scala похожи на Java с некоторыми вариациями. В отличие от C++, по умолчанию в Scala задается «публичная» видимость. Видимость регулируется с помощью ключевых слов protected и private. Видимость указывается в начале объявлений функций, переменных или трейтов. Применение private [this] закрывает объявление для конкретного экземпляра внутри класса.

Определения методов считаются обычными функциями, начинаются с ключевого слова def, за которым следуют необязательные списки аргументов, символ двоеточия «:» и тип возвращаемого значения метода. Абстрактным является метод, у которого отсутствует тело. Методы могут вкладываться друг в друга.

Для иллюстрации представим абстрактный класс для комплексного числа:

class Complex_number (first: Double, second: Double)
{
                  val re = first
                  val im = second
                  override def toString = re + " + " im + "i"
                  def add(that: Complex_number): Complex_number =
                       new Complex_number (this.re + that.re, this.im + that.im)
                  def subtract(that: Complex_number): Complex_number =
                       new Complex(this.re - that.re, this.im - that.im)
}

Определение класса включает только два атрибута: re (действительная часть) и im (мнимая часть). С помощью свойства override операция toString переопределена. Это сделано для облегчения печати результата. Заданы две абстрактные операции: сложение и вычитание. Абстрактные операции записываются в виде двух методов. Каждый метод создает новое комплексное число, которое автоматически печатается на консоли с помощью переопределенного метода toString.

После загрузки этого фрагмента в интерпретатор Scala можно выполнить следующие команды:

val c1 = new Complex_number(3, 4) //печать комплексного числа 3.0 + 4.0 i
val c2 = new Complex_number(4, 5) // печать комплексного числа 4.0 + 5.0 i
c1 add c2 // печать комплексного числа 7.0 + 9.0 i
c1 subtract c2 // печать комплексного числа -1.0 + – 1.0

Точка с запятой используется в языке значительно реже: она не ставится в конце оператора, если он записан один в строке. Если строка содержит более одного оператора, точка с запятой обязательна. Scala поддерживает как изменяемые, так и неизменяемые структуры данных Язык обеспечивает полиморфизм, и если тип переменной не указан, то он выводится на основе значения, заданного для переменной.

Scala реализует обширный набор типов данных: массивы, ассоциативные массивы, списки, кортежи и множества. Массивы являются изменяемыми объектами, а списки — неизменяемыми объектами. Списки используются при функциональном программировании, а массивы — при императивном программировании. Множества и ассоциативные массивы могут создаваться как изменяемыми, так и неизменными с помощью трейтов. Напомним, что трейты — это абстрактные интерфейсы, которые расширяют содержание объектов. Например, если имеется класс «транспортное средство» и трейт «четырехколесный», расширяющий транспортные средства, то автомобиль соответствует классу «транспортное средство» с добавлением трейта «четырехколесный». В случае множеств и ассоциативных массивов связывание «изменяемого» и «неизменяемого» трейтов с классом множество или ассоциативный массив обеспечивает, в конечном счете, их изменяемость или неизменность.

Целочисленный массив объявляется как Array [Int] (4). Это означает, что объект является массивом, содержащим четыре целых числа. Индексы переменных записываются внутри пары круглых скобок. Поскольку каждая структура данных является объектом, массив создается с использованием конструктора new. Например, объявление val: studentNames = new array [String] (20) создаст объект массива, содержащий 20 строк. К его строкам можно получить доступ с помощью studentNames(i), где i — индексная переменная типа integer.

Списки могут быть объявлены в форме List (1, 2, 3) или как несколько элементов, соединенных символом «::». Например, List (1, 2, 3) можно записать как 1 :: 2 :: 3 :: Nil. Два списка xl и yl соединяются с помощью символа «:::». Например, List (1, 2) ::: List (3, 4, 5) создают List (1, 2, 3, 4, 5).

Язык Scala поддерживает выражения if-then-else, классы case, операторы while-loop, do-while-loop, итератор foreachloop, определяет итерацию forloop и рекурсивные вызовы функций. Передавая функцию в качестве параметра в другую функцию, можно смоделировать композицию. Кроме того, Scala поддерживает обновление в индексированных переменных, что позволяет разрабатывать программы на основе обычных итераций.

Рассмотрим еще один пример объявления функции:

def factorial(n: Int): Int =
{                  if (n == 0) 1
                   else n * factorial(n – 1)
}

Здесь функция описывает факториал и объявляет тип аргумента и тип результата как целочисленный. Предусмотрен рекурсивный вызов функции.

Scala является блочно-структурированным языком, где функции могут вкладываться внутрь других функций. Локальные переменные имеют область действия внутри блоков, где они были объявлены. Внутри вложенного блока переменные, объявленные во внешних блоках, могут быть перекрыты. Scala поддерживает концепцию модуля с использованием пакетов Java и может импортировать методы по предложению import. По умолчанию Scala импортирует все библиотеки классов Java и любую предопределенную библиотеку в Scala перед выполнением программы. Для передачи параметров Scala использует передачу по значению, а также передачу по имени. Синтаксис передачи по имени: : ‘=>’ , тогда как синтаксис передачи по значению имеет вид : . Scala использует возможности обработки исключений Java.

Примеры программного кода на Scala

def add7(n: Int): Int = {n + 7} // функция добавляет 7 к числу

Функция add7 добавляет 7 к входному параметру n и возвращает значение. Обратите внимание, что тип параметра и тип результата функции объявлены явно. Тело функции является блоком и заключено в фигурные скобки.
def int_square(x: Int): Int = {x * x} // возведение в квадрат целых
def square_add(x: Int): Int = int_square(add7(x)) // композиция

Функция square_add показывает композицию двух функций: square и add7. Сначала функция add7 применяется для генерации числа, которое на 7 больше входного параметра, а затем сгенерированное значение возводится в квадрат. Например, square_add (5) эквивалентно square (5 + 7) = 144.
def power_rec(x: Double, n:Int): Double =
{if (n == 0) 1 else x * power_rec(x, n-1)} // if-then-else и рекурсия

Функция power_rec иллюстрирует использование выражения if-then-else и рекурсии в Scala. Обратите внимание, что предикат заключен в круглые скобки и нет никакой мутации (изменения значений переменных).
def power_iter(x : Int, n: Int): Int = //итерационная версия power
{                var a = n; var b = 1;
                  while(a > 0 ) {b = x * b; a = a - 1}// обновление переменных
}

Напротив, функция power_iter использует локальные изменяемые переменные a и b для вычисления значения функции xn. Значение накапливается в аккумуляторе b и, наконец, возвращается после завершения цикла while.
def sum_list(xl:List[Int]): Int = // рекурсия над списками
{                if (xs.isEmpty) 0
                   else xl.head + sum_list(xs.tail)
}

Функция sum_list добавляет все целые числа в список, используя рекурсивный вызов в остальной части списка. Встроенный метод isEmpty используется для проверки пустого списка, метод head применяется для доступа к первому элементу списка, а метод tail обеспечивает доступ к остальным элементам списка.
def apply_all(my_func:Int => Int, xl:List[Int]): List[Int] =
{xl map my_func}

Scala использует встроенную функцию отображения map, которая обеспечивает возможность применения функциональной формы apply_all. Здесь в теле функции сначала записывается параметр (xl), затем функция отображения высшего порядка (map), а затем имя функции (my_func). В этом случае apply_all (int_square, List (1, 2, 3)) будет генерировать список List (1, 4, 9). Следует отметить способ объявления типа для функции my_func. Тип функции объявлен как Int => Int, что означает, что он принимает входной аргумент типа integer и генерирует выходное значение типа integer.
def construct(my_funcs:List[Int => Int], n:Int): List[Int] = // разработка
{                if (my_funcs.isEmpty) Nil
                    else my_funcs.head(n)::construct(my_funcs.tail, n)
}

Наконец, функция construct берет последовательность функций, применяемых к одному и тому же аргументу, и генерирует последовательность выходных значений. Например, construct (List (add7, int_square), 5) будет генерировать список List (12, 25). Программа с функцией construct возвращает нулевой список, если список функций пуст. В противном случае она вызывает рекурсивно из списка остальные функции и объединяет результат применения первой функции с остальной частью выходной последовательности, полученной путем применения остальных функций к этому же аргументу.

Рецензенты:


Соколов Б. В., д. т. н., профессор, руководитель лаборатории информационных технологий
в системном анализе и моделировании Санкт-Петербургского института информатики
и автоматизации РАН;

Пасмуров А. Я., д. т. н., доцент, senior member of IEEE, руководитель учебного центра ФГУП
«ЗащитаИнфоТранс» Министерства транспорта РФ, Санкт-Петербургский филиал.

» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок

Для Хаброжителей скидка 20% по купону — Орлов

habr.com

Учебник по программированию

Глава 1. Компьютеры, люди и программирование 53
1.1. Введение 54
1.2. Программное обеспечение 55
1.3. Люди 58
1.4. Компьютерные науки 62
1.5. Компьютеры повсюду 62
1.5.1. С экранами и без них 63
1.5.2. Кораблестроение 64
1.5.3. Телекоммуникации 65
1.5.4. Медицина 68
1.5.5. Информация 69
1.5.6. Вид сверху 71
1.5.7. И что? 73
1.6. Идеалы программистов 73

Часть I. Основы 81

Глава 2. Hello, World! 83
2.1. Программы 84
2.2. Классическая первая программа 85
2.3. Компиляция 88
2.4. Редактирование связей 91
2.5. Среды программирования 92

Глава 3. Объекты, типы и значения 99
3.1. Ввод 100
3.2. Переменные 102
3.3. Ввод и тип 104
3.4. Операции и операторы 106
3.5. Присваивание и инициализация 109
3.5.1. Пример: выявление повторяющихся слов 111
3.6. Составные операторы присваивания 113
3.6.1. Пример: выявление повторяющихся слов 114
3.7. Имена 115
3.8. Типы и объекты 117
3.9. Безопасность типов 119
3.9.1. Безопасные преобразования 120
3.9.2. Небезопасные преобразования 121

Глава 4. Вычисления 129
4.1. Вычисления 130
4.2. Цели и средства 132
4.3. Выражения 135
4.3.1. Константные выражения 136
4.3.2. Операторы 138
4.3.3. Преобразования 140
4.4. Инструкции 141
4.4.1. Инструкции выбора 143
4.4.2. Итерация 149
4.5. Функции 154
4.5.1. Зачем нужны функции 156
4.5.2. Объявления функций 157
4.6. Вектор 158
4.6.1. Обход вектора 160
4.6.2. Увеличение вектора 160
4.6.3. Числовой пример 161
4.6.4. Текстовый пример 164
4.7. Языковые возможности 166

Глава 5. Ошибки 173
5.1. Введение 174
5.2. Источники ошибок 176
5.3. Ошибки времени компиляции 177
5.3.1. Синтаксические ошибки 178
5.3.2. Ошибки, связанные с типами 179
5.3.3. Не ошибки 180
5.4. Ошибки времени редактирования связей 181
5.5. Ошибки времени выполнения программы 182
5.5.1. Обработка ошибок в вызывающем коде 183
5.5.2. Обработка ошибок в вызываемом коде 185
5.5.3. Сообщения об ошибках 187
5.6. Исключения 188
5.6.1. Неправильные аргументы 189
5.6.2. Ошибки, связанные с диапазоном 190
5.6.3. Неправильный ввод 192
5.6.4. Сужающие преобразования 196
5.7. Логические ошибки 197
5.8. Оценка 200
5.9. Отладка 201
5.9.1. Практические советы по отладке 203
5.10. Пред- и постусловия 207
5.10.1. Постусловия 209
5.11. Тестирование 210

Глава 6. Написание программ 217
6.1. Задача 218
6.2. Размышления над задачей 219
6.2.1. Стадии разработки программы 220
6.2.2. Стратегия 220
6.3. Вернемся к калькулятору 223
6.3.1. Первая попытка 224
6.3.2. Лексемы 226
6.3.3. Реализация лексем 228
6.3.4. Использование лексем 230
6.3.5. Назад к школьной доске! 232
6.4. Грамматики 233
6.4.1. Отступление: грамматика английского языка 238
6.4.2. Написание грамматики 239
6.5. Превращение грамматики в программу 241
6.5.1. Реализация грамматических правил 241
6.5.2. Выражения 242
6.5.3. Термы 246
6.5.4. Первичные выражения 248
6.6. Испытание первой версии 249
6.7. Испытание второй версии 254
6.8. Потоки лексем 255
6.8.1. Реализация классаToken stream 257
6.8.2. Чтение лексем 259
6.8.3. Считывание чисел 260
6.9. Структура программы 261

Глава 7. Завершение программы 267
7.1. Введение 268
7.2. Ввод и вывод 268
7.3. Обработка ошибок 270
7.4. Отрицательные числа 275
7.5. Остаток от деления: % 276
7.6. Приведение кода в порядок 278
7.6.1. Символические константы 278
7.6.2. Использование функций 280
7.6.3. Размещение кода 281
7.6.4. Комментарии 283
7.7. Восстановление после ошибок 285
7.8. Переменные 288
7.8.1. Переменные и определения 288
7.8.2. Использование имен 293
7.8.3. Предопределенные имена 296
7.8.4. Это все? 296

Глава 8. Технические детали: функции и прочее 301
8.1. Технические детали 302
8.2. Объявления и определения 303
8.2.1. Виды объявлений 308
8.2.2. Объявления переменных и констант 308
8.2.3. Инициализация по умолчанию 310
8.3. Заголовочные файлы 310
8.4. Область видимости 313
8.5. Вызов функции и возврат значения 319
8.5.1. Объявление аргументов и тип возвращаемого значения 319
8.5.2. Возврат значения 321
8.5.3. Передача параметров по значению 322
8.5.4. Передача параметров по константной ссылке 323
8.5.5. Передача параметров по ссылке 325
8.5.6. Сравнение механизмов передачи параметров по значению и по ссылке 328
8.5.7. Проверка аргументов и преобразование типов 331
8.5.8. Реализация вызова функции 332
8.5.9. constexpr-функции 337
8.6. Порядок вычислений 338
8.6.1. Вычисление выражения 340
8.6.2. Глобальная инициализация 340
8.7. Пространства имен 342
8.7.1. Объявления using и директивы using 343

Глава 9. Технические детали: классы и прочее 351
9.1. Типы, определенные пользователем 352
9.2. Классы и члены класса 354
9.3. Интерфейс и реализация 354
9.4. Разработка класса 356
9.4.1. Структура и функции 356
9.4.2. Функции- члены и конструкторы 358
9.4.3. Сокрытие деталей 360
9.4.4. Определение функций-членов 362
9.4.5. Ссылка на текущий объект 365
9.4.6. Сообщения об ошибках 365
9.5. Перечисления 367
9.5.1. «Простые» перечисления 369
9.6. Перегрузка операторов 370
9.7. Интерфейсы классов 371
9.7.1. Типы аргументов 372
9.7.2. Копирование 375
9.7.3. Конструкторы по умолчанию 376
9.7.4. Константные функции-члены 379
9.7.5. Члены и вспомогательные функции 381
9.8. Класс Date 383

Часть II. Ввод и вывод 391

Глава 10. Потоки ввода и вывода 393
10.1. Ввод и вывод 394
10.2. Модель потока ввода-вывода 396
10.3. Файлы 398
10.4. Открытие файла 399
10.5. Чтение и запись файла 401
10.6. Обработка ошибок ввода-вывода 403
10.7. Считывание отдельного значения 407
10.7.1. Разделение задачи на управляемые части 409
10.7.2. Отделение диалога от функции 412
10.8. Операторы вывода, определенные пользователем 413
10.9. Операторы ввода, определенные пользователем 414
10.10. Стандартный цикл ввода 415
10.11. Чтение структурированного файла 417
10.11.1. Представление в памяти 418
10.11.2. Чтение структурированных значений 420
10.11.3. Изменение представлений 424

Глава 11. Настройка ввода и вывода 429
11.1. Регулярность и нерегулярность 430
11.2. Форматирование вывода 431
1 1.2.1. Вывод целых чисел 431
11.2.2. Ввод целых чисел 434
11.2.3. Вывод чисел с плавающей точкой 435
11.2.4. Точность 436
11.2.5. Поля 437
1 1.3. Открытие файла и позиционирование 438
11.3.1. Режимы открытия файлов 439
11.3.2. Бинарные файлы 440
11.3.3. Позиционирование в файлах 443
11.4. Строковые потоки 444
11.5. Ввод, ориентированный на строки 446
1 1.6. Классификация символов 447
11.7. Использование нестандартных разделителей 449
11.8. И еще много чего 456

Глава 12. Модель вывода на экран 463
12.1. Почему графика? 464
12.2. Модель вывода на дисплей 465
12.3. Первый пример 467
12.4. Использование библиотеки графического пользовательского интерфейса 471
12.5. Координаты 472
12.6. Класс Shape 473
12.7. Использование примитивов Shape 474
12.7.1. Заголовочные файлы и функция main 474
12.7.2. Почти пустое окно 475
12.7.3. Оси координат 477
12.7.4. График функции 479
12.7.5. Многоугольники 480
12.7.6. Прямоугольник 481
12.7.7. Заполнение 484
12.7.8. Текст 484
12.7.9. Изображения 486
12.7.10. И многое другое 487
12.8. Запуск программы 488
12.8.1. Исходные файлы 490

Глава 13. Графические классы 495
13.1. Обзор графических классов 496
13.2. Классы Point и Line 498
13.3. Класс Lines 501
13.4. Класс Color 504
13.5. Класс Line style 507
13.6. Класс Open polyline 509
13.7. Класс Closed_polyline 510
13.8. Класс Polygon 512
13.9. Класс Rectangle 514
13.10. Управление неименованными объектами 519
13.1 1. Класс Text 521
13.1 2. Класс Circle 523
13.13. Класс Ellipse 525
13.14. Класс Marked_polyline 527
13.15. Класс Marks 529
13.16. Класс Mark 530
13.17. Класс Image 532

Глава 14. Проектирование графических классов 539
14.1. Принципы проектирования 540
14.1.1. Типы 540
14.1.2. Операции 542
14.1.3. Именование 543
14.1.4. Изменяемость 545
14.2. Класс Shape 546
14.2.1. Абстрактный класс 547
14.2.2. Управление доступом 549
14.2.3. Рисование фигур 552
14.2.4. Копирование и изменчивость 556
14.3. Базовые и производные классы 557
14.3.1. Схема объекта 559
14.3.2. Порождение классов и определение виртуальных функций 561
14.3.3. Перекрытие 562
14.3.4. Доступ 564
14.3.5. Чисто виртуальные функции 565
14.4. Преимущества объектно-ориентированного программирования 567

Глава 15. Графическое представление функций и данных 575
15.1. Введение 576
15.2. Графики простых функций 576
15.3. Класс Function 580
15.3.1. Аргументы по умолчанию 582
15.3.2. Другие примеры 583
15.3.3. Лямбда-выражения 585
15.4. Оси координат 586
15.5. Аппроксимация 588
15.6. Графическое представление данных 594
15.6.1. Чтение файла 596
15.6.2. Общая схема 598
15.6.3. Масштабирование данных 598
15.6.4. Построение графика 600

Глава 16. Графические пользовательские интерфейсы 607
16.1. Альтернативы пользовательского интерфейса 608
16.2. Кнопка Next 609
16.3. Простое окно 611
16.3.1. Функции обратного вызова 613
16.3.2. Цикл ожидания 616
16.3.3. Лямбда-выражения в качестве функций обратного вызова 617
16.4. Класс Button и другие разновидности Widget 618
16.4.1. Класс Widget 618
16.4.2. Класс Button 620
16.4.3. Классы In box и Out box 620
16.4.4. Класс Menu 621
16.5. Пример 622
16.6. Инверсия управления 626
16.7. Добавление меню 627
16.8. Отладка GUI-программы 632

Часть III. Данные и алгоритмы 639

Глава 17. Векторы и динамически выделяемая память 641
17.1. Введение 642
17.2. Основы 644
17.3. Память, адреса и указатели 646
17.3.1. Оператор si zeof 649
17.4. Динамически распределяемая память и указатели 650
17.4.1. Размещение в динамической памяти 651
17.4.2. Доступ с помощью указателей 653
17.4.3. Диапазоны 654
17.4.4. Инициализация 656
17.4.5. Нулевой указатель 657
17.4.6. Освобождение памяти 658
17.5. Деструкторы 661
17.5.1. Генерируемые деструкторы 663
17.5.2. Деструкторы и динамическая память 664
17.6. Доступ к элементам 665
17.7. Указатели на объекты класса 666
17.8. Путаница с типами: void* и операторы приведения типов 668
17.9. Указатели и ссылки 671
17.9.1. Указатели и ссылки как параметры функций 672
17.9.2. Указатели, ссылки и наследование 673
17.9.3. Пример: списки 674
17.9.4. Операции над списками 676
1 7.9.5. Использование списков 677
1 7.10. Указатель this 679
17.10.1. Еще об использовании списков 681

Глава 18. Векторы и массивы 687
18.1. Введение 688
18.2. Инициализация 689
18.3. Копирование 691
18.3.1. Копирующие конструкторы 693
18.3.2. Копирующее присваивание 694
18.3.3. Терминология, связанная с копированием 696
18.3.4. Перемещение 697
18.4. Основные операции 700
18.4.1. Явные конструкторы 702
18.4.2. Отладка конструкторов и деструкторов 703
18.5. Доступ к элементам вектора 706
18.5.1. Константная перегрузка 707
18.6. Массивы 708
18.6.1. Указатели на элементы массива 710
18.6.2. Указатели и массивы 712
18.6.3. Инициализация массива 714
18.6.4. Проблемы с указателями 716
18.7. Примеры: палиндром 719
18.7.1. Палиндромы с использованием string 719
18.7.2. Палиндромы с использованием массивов 720
18.7.3. Палиндромы с использованием указателей 721

Глава 19. Векторы, шаблоны и исключения 729
19.1. Проблемы 730
19.2. Изменение размера 734
19.2.1. Представление 734
19.2.2. Функции reserve и capacity 736
19.2.3. Функция resize 736
19.2.4. Функция push back 737
19.2.5. Присваивание 738
19.2.6. Текущее состояние дел 740
19.3. Шаблоны 741
19.3.1. Типы как шаблонные параметры 741
19.3.2. Обобщенное программирование 744
19.3.3. Концепции 747
19.3.4. Контейнеры и наследование 750
19.3.5. Целые числа как параметры шаблонов 751
19.3.6. Вывод аргументов шаблона 753
19.3.7. Обобщение класса vector 753
19.4. Проверка диапазона и исключения 757
19.4.1. Отступление от темы: вопросы проектирования 758
19.4.2. Признание в использовании макроса 760
19.5. Ресурсы и исключения 762
19.5.1. Потенциальные проблемы управления ресурсами 763
19.5.2. Захват ресурса— это инициализация 765
19.5.3. Гарантии 766
19.5.4. Класс uniqueptг 767
19.5.5. Возврат посредством перемещения 769
19.5.6. RAII для класса vector 770

Глава 20. Контейнеры и итераторы 777
20.1. Хранение и обработка данных 778
20.1.1. Работа с данными 779
20.1.2. Обобщение кода 780
20.2. Принципы библиотеки STL 783
20.3. Последовательности и итераторы 787
20.3.1. Вернемся к примерам 790
20.4. Связанные списки 791
20.4.1. Операции над списками 793
20.4.2. Итерация 794
20.5. Очередное обобщение класса vector 797
20.5.1. Обход контейнера 799
20.5.2 auto 799
20.6. Пример: простой текстовый редактор 801
20.6.1. Строки 803
20.6.2. Итерация 804
20.7. Классы vector, list и string 808
20.7.1. Операции insert и erase 810
20.8. Адаптация нашего класса vector к STL 813
20.9. Адаптация встроенных массивов к библиотеке STL 815
20.10. Обзор контейнеров 817
20.10.1. Категории итераторов 820

Глава 21. Алгоритмы и ассоциативные массивы 827
21.1. Алгоритмы стандартной библиотеки 828
21.2. Простейший алгоритм: f ind () 829
21.2.1. Примеры использования обобщенных алгоритмов 832
21.3. Универсальный поиск: find if () 833
21.4. Функциональные объекты 835
21.4.1. Абстрактная точка зрения на функциональные объекты 836
21.4.2. Предикаты на членах класса 838
21.4.3. Лямбда-выражения 839
21.5. Численные алгоритмы 840
21.5.1. Алгоритм accumulate!) 841
21.5.2. Обобщение алгоритма accumulate () 842
21.5.3. Алгоритм inner_product () 844
21.5.4. Обобщение алгоритма inner_product () 845
21.6. Ассоциативные контейнеры 846
21.6.1. Контейнер тар 847
21.6.2. Обзор контейнера тар 849
21.6.3. Еще один пример использования тар 852
21.6.4. Контейнер unordered map 854
21.6.5. Контейнер set 857
21.7. Копирование 859
21.7.1. Алгоритм сору 859
21.7.2. Итераторы потоков 860
21.7.3. Использование set для поддержки упорядоченности 863
21.7.4. Алгоритм copy if 863
21.8. Сортировка и поиск 864
21.9. Алгоритмы контейнеров 866

Часть IV. Дополнительные темы 873

Глава 22. Идеалы и история 875
22.1. История, идеалы и профессионализм 876
22.1.1. Цели и философия языка программирования 877
22.1.2. Идеалы программирования 878
22.1.3. Стили и парадигмы 887
22.2. Обзор истории языков программирования 891
22.2.1. Первые языки программирования 892
22.2.2. Корни современных языков программирования 894
22.2.3. Семейство языков Algol 901
22.2.4. Язык программирования Simula 909
22.2.5. Язык программирования С 911
22.2.6. Язык программирования C++ 915
22.2.7. Современное состояние дел 919
22.2.8. Источники информации 920

Глава 23. Работа с текстом 925
23.1. Текст 926
23.2. Строки 926
23.3. Потоки ввода-вывода 930
23.4. Ассоциативные контейнеры 931
23.4.1. Детали реализации 937
23.5. Проблема 939
23.6. Идея регулярных выражений 941
23.6.1. Необработанные строковые литералы 944
23.7. Поиск с помощью регулярных выражений 945
23.8. Синтаксис регулярных выражений 947
23.8.1. Символы и специальные символы 948
23.8.2. Классы символов 949
23.8.3. Повторения 950
23.8.4. Группировка 951
23.8.5. Альтернативы 951
23.8.6. Наборы символов и диапазоны 952
23.8.7. Ошибки в регулярных выражениях 954
23.9. Сопоставление регулярных выражений 955
23.10. Ссылки 960

Глава 24. Числа 965
24.1. Введение 966
24.2. Размер, точность и переполнение 967
24.2.1. Пределы числовых диапазонов 970
24.3. Массивы 971
24.4. Многомерные массивы в стиле языка С 972
24.5. Библиотека Matrix 974
24.5.1. Размерности и доступ 975
24.5.2. Одномерная матрица 978
24.5.3. Двумерные матрицы 981
24.5.4. Ввод-вывод матриц 984
24.5.5. Трехмерные матрицы 984
24.6. Пример: решение систем линейных уравнений 985
24.6.1. Классическое исключение Гаусса 987
24.6.2. Выбор опорного элемента 988
24.6.3. Тестирование 989
24.7. Случайные числа 991
24.8. Стандартные математические функции 994
24.9. Комплексные числа 995
24.10. Ссылки 997

Глава 25. Программирование встроенных систем 1003
25.1. Встроенные системы 1004
25.2. Основные концепции 1008
25.2.1. Предсказуемость 1011
25.2.2. Идеалы 1012
25.2.3. Сохранение работоспособности после сбоя 1013
25.3. Управление памятью 1015
25.3.1. Проблемы с динамической памятью 1017
25.3.2. Альтернативы динамической памяти 1020
25.3.3. Пример пула 1021
25.3.4. Пример стека 1023
25.4. Адреса, указатели и массивы 1024
25.4.1. Непроверяемые преобразования 1024
25.4.2. Проблема: дисфункциональный интерфейс 1025
25.4.3. Решение: интерфейсный класс 1029
25.4.4. Наследование и контейнеры 1032
25.5. Биты, байты и слова 1036
25.5.1. Операции с битами и байтами 1036
25.5.2. Класс bitset 1041
25.5.3. Целые числа со знаком и без знака 1042
25.5.4. Работа с битами 1047
25.5.5. Битовые поля 1049
25.5.6. Пример: простое шифрование 1051
25.6. Стандарты кодирования 1056
25.6.1. Каким должен быть стандарт кодирования? 1058
25.6.2. Примеры правил 1059
25.6.3. Реальные стандарты кодирования 1065

Глава 26. Тестирование 1073
26.1. Чего мы хотим 1074
26.1.1. Предостережение 1076
26.2. Доказательства 1076
26.3. Тестирование 1076
26.3.1. Регрессивные тесты 1078
26.3.2. Модульные тесты 1078
26.3.3. Алгоритмы и не алгоритмы 1086
26.3.4. Системные тесты 1094
26.3.5. Поиск предположений, которые не выполняются 1095
26.4. Проектирование с учетом тестирования 1097
26.5. Отладка 1098
26.6. Производительность 1099
26.6.1. Измерение времени 1101
26.7. Ссылки 1103

Глава 27. Язык программирования C 1107
27.1. Языки C и C++: братья 1108
27.1.1. Совместимость языков C и C++ 1111
27.1.2. Возможности C++, отсутствующие в C 1112
27.1.3. Стандартная библиотека языка C 1114
27.2. Функции 1115
27.2.1. Отсутствие перегрузки имен функций 1116
27.2.2. Проверка типов аргументов функций 1116
27.2.3. Определения функций 1118
27.2.4. Вызов C-функций из C++-программы и наоборот 1 120
27.2.5. Указатели на функции 1122
27.3. Второстепенные языковые различия 1 123
27.3.1. Дескриптор пространства имен struct 1 124
27.3.2. Ключевые слова 1 125
27.3.3. Определения 1125
27.3.4. Приведение типов в стиле языка C 1127
27.3.5. Преобразование указателей типа void* 1128
27.3.6. Перечисление 1129
27.3.7. Пространства имен 1130
27.4. Динамическая память 1130
27.5. Строки в стиле C 1132
27.5.1. Строки в стиле C и ключевое слово const 1135
27.5.2. Операции над байтами 1136
27.5.3. Пример: функция strcpyO 1136
27.5.4. Вопросы стиля 1137
27.6. Ввод-вывод: заголовочный файл stdio.h 1138
27.6.1. Вывод 1138
27.6.2. Ввод 1139
27.6.3. Файлы 1141
27.7. Константы и макросы 1142
27.8. Макросы 1143
27.8.1. Макросы, похожие на функции 1144
27.8.2. Синтаксические макросы 1145
27.8.3. Условная компиляция 1146
27.9. Пример: интрузивные контейнеры 1147

Часть V. Приложения 1159

Приложение А. Обзор языка 1161
А. 1. Общие сведения 1162
А. 1.1. Терминология 1163
А. 1.2. Запуск и завершение программы 1 164
А. 1.3. Комментарии 1164

А. 2. Литералы 1165
А.2.1. Целочисленные литералы 1165
А.2.2. Литералы с плавающей точкой 1 167
А.2.3. Булевы литералы 1168
А.2.4. Символьные литералы 1168
А.2.5. Строковые литералы 1169
А.2.6. Указательные литералы 1169

А.З. Идентификаторы 1169
А.3.1. Ключевые слова 1170

А.4. Область видимости, класс памяти и время жизни 1170
А.4.1. Область видимости 1171
А.4.2. Класс памяти 1172
А.4.3. Время жизни 1173

А. 5. Выражения 1174
А.5.1. Операторы, определенные пользователем 1178
А.5.2. Неявное преобразование типа 1179
А.5.3. Константные выражения 1181
А.5.4. Оператор sizeof 1182
А.5.5. Логические выражения 1182
А.5.6. Операторы new и delete 1182
А.5.7. Операторы приведения 1183

А. 6. Инструкции 1184

А.7. Объявления 1186
А.7.1. Определения 1187

А.8. Встроенные типы 1187
А.8.1. Указатели 1188
А.8.2. Массивы 1190
А.8.3. Ссылки 1191

А. 9. Функции 1191
А.9.1. Разрешение перегрузки 1192
А.9.2. Аргументы по умолчанию 1193
А.9.3. Неопределенные аргументы 1194
А.9.4. Спецификации связей 1 194

А. 10. Типы, определенные пользователем 1195
А. 10.1. Перегрузка операций 1 195

А. 11. Перечисления 1196

А. 12. Классы 1197
А. 12.1. Доступ к членам класса 1197
А. 12.2. Определения членов класса 1200
А. 12.3. Создание, уничтожение и копирование 1201
А. 12.4. Производные классы 1204
А. 12.5. Битовые поля 1208
А. 12.6. Объединения 1209

А. 13. Шаблоны 1209
А. 13.1. Аргументы шаблонов 1210
А. 13.2. Инстанцирование шаблонов 1211
А. 13.3. Шаблонные типы членов-классов 1212
А. 14. Исключения 1213
А. 15. Пространства имен 1215
А. 16. Псевдонимы 1216
А. 17. Директивы препроцессора 1216
А. 17.1. Директива #include 1217
А. 17.2. Директива #define 1217

Приложение Б. Обзор стандартной библиотеки 1219

Б. 1. Обзор 1220
Б. 1.1. Заголовочные файлы 1221
Б. 1.2. Пространство имен std 1224
Б. 1.3. Стиль описания 1224

Б.2. Обработка ошибок 1225
Б.2.1. Исключения 1225

Б.З. Итераторы 1227
Б.3.1. Модель итераторов 1227
Б.3.2. Категории итераторов 1229

Б.4. Контейнеры 1231
Б.4.1. Обзор 1233
Б. 4.2. Члены — типы 1234
Б.4.3. Конструкторы, деструкторы и присваивания 1234
Б.4.4. Итераторы 1235
Б.4.5. Доступ к элементам 1235
Б. 4.6. Операции над стеком и очередью 1236
Б.4.7. Операции со списком 1237
Б.4.8. Размер и емкость 1237
Б.4.9. Другие операции 1238
Б.4.10. Операции над ассоциативными контейнерами 1238

Б.5. Алгоритмы 1239
Б.5.1. Немодицифирующие алгоритмы для последовательностей 1240
Б.5.2. Алгоритмы, модифицирующие последовательности 1241
Б.5.3. Вспомогательные алгоритмы 1244
Б.5.4. Сортировка и поиск 1244
Б.5.5. Алгоритмы для множеств 1246
Б.5.6, Пирамиды 1247
Б.5.7. Перестановки 1248
Б.5.8. Функции пип и шах 1249

Б.6. Утилиты библиотеки STL 1250
Б.6.1. Итераторы вставки 1250
Б.6.2. Функциональные объекты 1250
Б.6.3. Классы pair и tuple 1252
Б.6.4. Список инициализации 1253
Б.6.5. Указатели управления ресурсами 1254

Б.7. Потоки ввода-вывода 1255
Б. 7.1. Иерархия потоков ввода-вывода 1256
Б.7.2. Обработка ошибок 1258
Б. 7.3. Операции ввода 1258
Б.7.4. Операции вывода 1259
Б.7.5. Форматирование 1260
Б. 7.6. Стандартные манипуляторы 1260

Б.8. Работа со строками 1261
Б.8.1. Классификация символов 1262
Б.8.2. Строки 1262
Б. 8.3. Регулярные выражения 1264

Б.9. Работа с числами 1266
Б.9.1. Предельные значения 1266
Б.9.2. Стандартные математические функции 1267
Б.9.3. Комплексные числа 1268
Б.9.4. Класс valarray 1269
Б.9.5. Обобщенные численные алгоритмы 1269
Б.9.6. Случайные числа 1270

Б. 10. Работа со временем 1270

Б. 11. Функции стандартной библиотеки языка С 1271
Б. 11.1. Файлы 1271
Б. 1 1.2. Семейство функций printf () 1272
Б. 11.3. С-строки 1277
Б. 11.4. Память 1278
Б. 11.5. Дата и время 1279
Б. 11.6. Другие функции 1280

Б. 12. Другие библиотеки 1281

Приложение В. Начала работы с Visual Studio 1283
В.1. Запуск программы 1284

В.2. Инсталляция Visual Studio 1284

В.З. Создание и запуск программ 1285
В.3.1. Создание нового проекта 1285
В.3.2. Использование заголовочного файла std_lib_facilities.h 1285
В.3.3. Добавление в проект исходного файла на языке C++ 1286
В.3.4. Ввод исходного кода 1286
В.3.5. Создание выполнимой программы 1286
В.3.6. Выполнение программы 1287
В.3.7. Сохранение программы 1287

В.4. Что дальше 1287

Приложение Г. Установка FLTK 1289
Г. 1. Введение 1290
Г. 2. Загрузка библиотеки FLTK 1290
Г.З. Установка библиотеки FLTK 1291
Г.4. Использование библиотеки FLTK в среде Visual Studio 1292
Г. 5. Тестирование, все ли работает 12 92

Приложение Д. Реализация графического пользовательского интерфейса 1295
Д. 1. Реализация обратных вызовов 1296
Д.2. Реализация класса Widget 1297
Д.З. Реализация класса Window 1298
Д.4. Реализация класса Vector ref 1300
Д.5. Пример: работа с объектами Widget 1301
Глоссарий 1305
Библиография 1313
Предметный указатель 1316
Фотографии 1327

www.htbook.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *