Нынешнее издание столь популярного вводного курса стандартного языка C++ было полностью переделано, реорганизовано и переписано так, чтобы помочь быстрее и эффективнее научиться программировать на этом языке. По мере развития языка C++, автор старается вносить в последующие издания соответствующие изменения. Теперь стандартная библиотека C++ описана с самого начала, что позволяет читателю сразу приступить к созданию работоспособных программ еще до изучения подробностей языка. Здесь содержатся полезные советы, которые помогут облегчить создание программ, а также повысить их эффективность. Примеры, в которых используются возможности библиотек, позволяют продемонстрировать достоинства языка C++, а также наиболее эффективные приемы его применения. Как и в предыдущих изданиях, здесь обсуждаются фундаментальные концепции и методы языка C++, что делает книгу ценнейшим ресурсом даже для опытных программистов.
Название: Язык программирования C++. Вводный курс Автор: Стенли Б. Липпман, Барбара Э. My, Жози Лажойе Издательство: Вильямс Год: 2007 Страниц: 892 Формат: DJVU Размер: 31,3 МБ ISBN: 5-8459-1121-4 Качество: Отличное
Содержание:
Введение ЧАСТЬ I. Основы ГЛАВА 1. Первые шаги 1.1. Создание простой программы на языке C++ 1.1.1. Компиляция и запуск программы 1.2. Первый взгляд на ввод-вывод 1.2.1. Стандартные объекты ввода и вывода 1.2.2. Программа, использующая библиотеку ввода-вывода 1.3. Несколько слов о комментариях 1.4. Средства управления 1.4.1. Оператор while 1.4.2. Оператор for 1.4.3. Оператор if 1.4.4. Ввод неизвестного количества данных 1.5. Введение в классы 1.5.1. Класс Sales_item 1.5.2. Первый взгляд на функции-члены 1.6. Программа на языке C++ Резюме Термины ГЛАВА 2. Переменные и базовые типы 2.1. Простые встроенные типы 2.1.1. Целочисленные типы 2.1.2. Типы с плавающей запятой 2.2. Литеральные константы 2.3. Переменные 2.3.1. Что такое переменная? 2.3.2. Имя переменной 2.3.3. Определение объектов 2.3.4. Правила инициализации переменных 2.3.5. Объявления и определения 2.3.6. Область видимости имен 2.3.7. Определение переменных по месту применения 2.4. Спецификатор const 2.5. Ссылки 2.6. Определение имен типов 2.7. Перечисления 2.8. Типы классов 2.9. Создание собственных файлов заголовка 2.9.1. Разработка собственных заголовков 2.9.2. Кратко о препроцессоре Резюме Термины ГЛАВА 3. Библиотечные типы данных 3.1. Пространства имен и объявления using 3.2. Библиотечный тип string 3.2.1. Определение и инициализация строк 3.2.2. Чтение и запись строк 3.2.3. Операции со строками 3.2.4. Работа с символами строки 3.3. Библиотечный тип vector 3.3.1. Определение и инициализация векторов 3.3.2. Операции с векторами 3.4. Знакомство с итераторами 3.4.1. Арифметические действия с итераторами 3.5. Библиотечный тип bitset 3.5.1. Определение и инициализация наборов битов 3.5.2. Операции с наборами битов Резюме Термины ГЛАВА 4. Массивы и указатели 4.1. Массивы 4.1.1. Определение и инициализация массивов 4.1.2. Операции с массивами 4.2. Знакомство с указателями 4.2.1. Что такое указатель? 4.2.2. Определение и инициализация указателей 4.2.3. Операции с указателями 4.2.4. Использование указателей для доступа к элементам массива 4.2.5. Указатели и спецификатор const 4.3. Символьная строка в стиле C 4.3.1. Динамическое создание массивов 4.3.2. Взаимодействие со старым кодом 4.4. Многомерные массивы 4.4.1. Указатели и многомерные массивы Резюме Термины ГЛАВА 5. Выражения 5.1. Арифметические операторы 5.2. Операторы отношения и логические операторы 5.3. Побитовые операторы 5.3.1. Использование битовых наборов и целочисленных значений 5.3.2. Использование операторов сдвига для организации ввода и вывода 5.4. Оператор присвоения 5.4.1. Оператор присвоения имеет порядок выполнения справа налево 5.4.2. Оператор присвоения имеет низкий приоритет 5.4.3. Составные операторы присвоения 5.5. Операторы инкремента и декремента 5.6. Оператор стрелка (->) 5.7. Условный оператор 5.8. Функция sizeof() 5.9. Оператор запятая (,) 5.10. Вычисление составных выражений 5.10.1. Приоритет 5.10.2. Порядок 5.10.3. Порядок вычисления операндов 5.11. Операторы new и delete 5.12. Преобразование типов 5.12.1. Когда происходит неявное преобразование типов 5.12.2. Арифметические преобразования 5.12.3. Другие неявные преобразования 5.12.4. Явное преобразование 5.12.5. Когда может пригодиться приведение типов 5.12.6. Именованные операторы приведения 5.12.7. Приведение типов в старом стиле Резюме Термины ГЛАВА 6. Операторы 6.1. Простые операторы 6.2. Операторы объявления 6.3. Составные операторы (блоки) 6.4. Операторная область видимости 6.5. Оператор if 6.5.1. Оператор if с разделом else 6.6. Оператор switch 6.6.1. Использование оператора switch 6.6.2. Порядок выполнения внутри оператора switch 6.6.3. Метка default 6.6.4. Выражение switch и метки case 6.6.5. Определение переменной внутри оператора switch 6.7. Оператор while 6.8. Оператор цикла for 6.8.1. Цикл for без частей заголовка 6.8.2. Несколько определений в заголовке цикла for 6.9. Оператор цикла do… while 6.10. Оператор break 6.11. Оператор continue 6.12. Оператор goto 6.13. Блок try и обработка исключений 6.13.1. Оператор throw 6.13.2. Блок try 6.13.3. Стандартные исключения 6.14. Использование препроцессора для отладки Резюме Термины ГЛАВА 7. Функции 7.1. Определение функций 7.1.1. Тип возвращаемого значения функции 7.1.2. Список параметров функции 7.2. Передача аргумента 7.2.1. Нессылочные параметры 7.2.2. Ссылочные параметры 7.2.3. Параметры типа векторов и других контейнеров 7.2.4. Параметры в виде массива 7.2.5. Манипулирование массивами, переданными в функции 7.2.6. Функция main(): обработка параметров командной строки 7.2.7. Функции с варьирующимися параметрами 7.3. Оператор return 7.3.1. Функции без возвращаемого значения 7.3.2. Функции, возвращающие значение 7.3.3. Рекурсия 7.4. Объявление функций 7.4.1. Значения параметров по умолчанию 7.5. Локальные объекты 7.5.1. Автоматические объекты 7.5.2. Статические локальные объекты 7.6. Встраиваемые функции 7.7. Функции-члены класса 7.7.1. Определение тела функции-члена 7.7.2. Определение функции-члена вне класса 7.7.3. Создание конструктора Sales_jtem() 7.7.4. Организация файлов кода классов 7.8. Перегруженные функции 7.8.1. Перегрузка и область видимости 7.8.2. Подбор функций и преобразование аргументов 7.8.3. Три этапа подбора перегруженной версии 7.8.4. Преобразование типов аргументов 7.9. Указатели на функции Резюме Термины ГЛАВА 8. Библиотека ввода-вывода 8.1. Объектно-ориентированная библиотека 8.2. Значения состояния потока 8.3. Управление буфером вывода 8.4. Ввод и вывод в файл 8.4.1. Использование объектов файловых потоков 8.4.2. Режимы файла 8.4.3. Программа, открывающая и проверяющая файл 8.5. Строковые потоки Резюме Термины ЧАСТЬ II. Контейнеры и алгоритмы ГЛАВА 9. Последовательные контейнеры 9.1. Определение последовательного контейнера 9.1.1. Инициализация элементов контейнера 9.1.2. Ограничения типов элементов, которые может содержать контейнер 9.2. Итераторы и диапазоны итераторов 9.2.1. Диапазоны итераторов 9.2.2. Некоторые операции с контейнерами делают итераторы некорректными 9.3. Операции с последовательными контейнерами 9.3.1. Вспомогательные типы, определенные в классе контейнера 9.3.2. Функции-члены begin() и end() 9.3.3. Добавление элементов в последовательный контейнер 9.3.4. Операторы сравнения 9.3.5. Операции с размером контейнера 9.3.6. Доступ к элементам 9.3.7. Удаление элементов 9.3.8. Присвоение и функция swap() 9.4. Как увеличивается размер вектора 9.4.1. Функции-члены capacity() и reserve() 9.5. Как выбрать тип контейнера 9.6. Еще раз о строках 9.6.1. Дополнительные способы создания строк 9.6.2. Дополнительные способы изменения строк 9.6.3. Операции, специфические только для строк 9.6.4. Операции поиска строк 9.6.5. Сравнение строк 9.7. Адаптеры контейнеров 9.7.1. Адаптер stack 9.7.2. Очередь и приоритетная очередь Резюме Термины ГЛАВА 10. Ассоциативные контейнеры 10.1. Предварительные сведения: тип pair 10.2. Ассоциативные контейнеры 10.3. Тип тар 10.3.1. Определение карты 10.3.2. Типы, определенные в шаблоне тар 10.3.3. Добавление элементов карты 10.3.4. Индексация карты 10.3.5. Применение функции map::insert() 10.3.6. Поиск и возвращение элементов карты 10.3.7. Удаление элементов карты 10.3.8. Перебор элементов карты 10.3.9. Карта преобразования слов 10.4. Тип set 10.4.1. Определение и применение наборов 10.4.2. Создание набора, исключающего слова 10.5. Типы multimap и multiset 10.5.1. Добавление и удаление элементов 10.5.2. Поиск элементов в контейнерах multimap и multiset 10.6. Применение контейнеров: программа TextQuery 10.6.1. Проект программы 10.6.2. Класс TextQuery 10.6.3. Применение класса TextQuery 10.6.4. Создание функций-членов Резюме Термины ГЛАВА 11. Общие алгоритмы 11.1. Краткий обзор 11.2. Первый взгляд на алгоритмы 11.2.1. Алгоритмы, только читающие элементы контейнера 11.2.2. Алгоритмы, записывающие элементы контейнера 11.2.3. Алгоритмы, переупорядочивающие элементы контейнера 11.3. Возвращаясь к итераторам 11.3.1. Итераторы вставки 11.3.2. Итераторы ввода-вывода 11.3.3. Реверсивные итераторы 11.3.4. Константные итераторы 11.3.5. Пять категорий итераторов 11.4. Структура общих алгоритмов 11.4.1. Параметрическая схема алгоритмов 11.4.2. Соглашения об именовании алгоритмов 11.5. Алгоритмы, специфические для контейнеров Резюме Термины ЧАСТЬ III. Абстракция, классы и данные ГЛАВА 12. Классы 12.1. Определение и объявление классов 12.1.1. Определение класса 12.1.2. Абстракция данных и инкапсуляция 12.1.3. Подробнее об определении классов 12.1.4. Объявление и определение класса 12.1.5. Объекты класса 12.2. Неявный указатель this 12.3. Область видимости класса 12.3.1. Поиск имен в области видимости класса 12.4. Конструкторы 12.4.1. Список инициализирующих значений конструктора 12.4.2. Аргументы по умолчанию и конструкторы 12.4.3. Стандартный конструктор 12.4.4. Неявное преобразование 12.4.5. Явная инициализация переменных-членов класса 12.5. Дружественные отношения 12.6. Статические члены класса 12.6.1. Статические функции-члены 12.6.2. Статические переменные-члены Резюме Термины ГЛАВА 13. Управление копированием 13.1. Конструктор копий 13.1.1. Синтезируемый конструктор копий 13.1.2. Определение собственного конструктора копий 13.1.3. Предотвращение копирования 13.2. Оператор присвоения 13.3. Деструктор 13.4. Пример обработки сообщения 13.5. Работа с указателями 13.5.1. Определение классов интеллектуальных указателей 13.5.2. Определение классов подобных значению Резюме Термины ГЛАВА 14. Перегрузка операторов и преобразования 14.1. Определение перегруженного оператора 14.1.1. Проект перегруженного оператора 14.2. Операторы ввода и вывода 14.2.1. Перегрузка оператора вывода « 14.2.2. Перегрузка оператора ввода » 14.3. Арифметические операторы и операторы отношения 14.3.1. Операторы равенства 14.3.2. Операторы отношения 14.4. Операторы присвоения 14.5. Оператор индексирования 14.6. Операторы доступа к членам класса 14.7. Операторы инкремента и декремента 14.8. Оператор вызова функции объекта 14.8.1. Использование объектов функции с библиотечными алгоритмами 14.8.2. Библиотечные объекты функций 14.8.3. Адаптеры функций для объектов функций 14.9. Преобразования и типы классов 14.9.1. Зачем нужны функции преобразования 14.9.2. Операторы преобразования 14.9.3. Соответствие аргументов и преобразования 14.9.4. Поиск перегруженной функции и аргументы класса 14.9.5. Перегрузка, преобразования и операторы Резюме Термины ЧАСТЬ IV. Объектно-ориентированное и общее программирование ГЛАВА 15. Объектно-ориентированное программирование 15.1. Краткий обзор OOP 15.2. Определение базовых и производных классов 15.2.1. Определение базового класса 15.2.2. Защищенные члены 15.2.3. Производные классы 15.2.4. Виртуальные и другие функции-члены 15.2.5. Открытое, закрытое и защищенное наследование 15.2.6. Наследование и дружественные отношения 15.2.7. Наследование и статические члены 15.3. Преобразования и наследование 15.3.1. Преобразование производного класса в базовый 15.3.2. Преобразование из базового класса в производный 15.4. Конструкторы и функции управления копированием 15.4.1. Конструкторы и функции управления копированием базового класса 15.4.2. Конструкторы производного класса 15.4.3. Управление копированием и наследование 15.4.4. Виртуальные деструкторы 15.4.5. Виртуальность конструкторов и деструкторов 15.5. Область видимости класса при наследовании 15.5.1. Поиск имен осуществляется во время компиляции 15.5.2. Конфликт имен и наследование 15.5.3. Область видимости и функции-члены 15.5.4. Виртуальные функции и область видимости 15.6. Чистые виртуальные функции 15.7. Контейнеры и наследование 15.8. Управляющие классы и наследование 15.8.1. Управляющий класс, подобный указателю 15.8.2. Клонирование неизвестного типа 15.8.3. Использование управляющего класса 15.9. Продолжение приложения TextQuery 15.9.1. Объектно-ориентированное решение 15.9.2. Управляющий класс, подобный значению 15.9.3. Класс Query_base 15.9.4. Управляющий класс Query 15.9.5. Производные классы 15.9.6. Виртуальные функции eval() Резюме Термины ГЛАВА 16. Шаблоны и общее программирование 16.1. Определение шаблона 16.1.1. Определение шаблона функции 16.1.2. Определение шаблона класса 16.1.3. Параметры шаблона 16.1.4. Параметры типа шаблона 16.1.5. Параметры значения шаблона 16.1.6. Создание общих программ 16.2. Создание экземпляра 16.2.1. Дедукция аргумента шаблона 16.2.2. Явные аргументы шаблона функции 16.3. Модели компиляции шаблона 16.4. Члены шаблона класса 16.4.1. Функции-члены шаблона класса 16.4.2. Аргументы шаблона для параметров значения 16.4.3. Дружественные отношения в шаблонах класса 16.4.4. Объявление дружественных отношений между шаблонами Queue и Queueltem 16.4.5. Шаблоны-члены 16.4.6. Законченный класс Queue 16.4.7. Статические члены шаблонов класса 16.5. Общий управляющий класс 16.5.1. Определение управляющего класса 16.5.2. Применение управляющего класса 16.6. Специализация шаблона 16.6.1. Специализация шаблона функции 16.6.2. Специализация шаблона класса 16.6.3. Специализация членов, но не класса 16.6.4. Частичная специализация шаблона класса 16.7. Перегрузка и шаблоны функций Резюме Термины ЧАСТЬ V. Дополнительные темы ГЛАВА 17. Инструменты для крупномасштабных программ 17.1. Обработка исключений 17.1.1. Передача исключения типа класса 17.1.2. Прокрутка стека 17.1.3. Обработка исключения 17.1.4. Повторная передача исключения 17.1.5. Обработчик для всех исключений 17.1.6. Блок try функции и конструкторы 17.1.7. Иерархия класса исключения 17.1.8. Автоматическое освобождение ресурсов 17.1.9. Класс auto_ptr 17.1.10. Спецификация исключений 17.1.11. Спецификация исключений указателя на функцию 17.2. Пространства имен 17.2.1. Определение пространств имен 17.2.2. Вложенные пространства имен 17.2.3. Неименованные пространства имен 17.2.4. Использование членов пространства имен 17.2.5. Классы, пространства имен и области видимости 17.2.6. Перегрузка и пространства имен 17.2.7. Пространства имен и шаблоны 17.3. Множественное и виртуальное наследование 17.3.1. Множественное наследование 17.3.2. Преобразования и несколько базовых классов 17.3.3. Управление копированием при множественном наследовании 17.3.4. Область видимости класса при множественном наследовании 17.3.5. Виртуальное наследование 17.3.6. Объявление виртуального базового класса 17.3.7. Семантика специальной инициализации Резюме Термины ГЛАВА 18. Специализированные инструменты и технологии 18.1. Оптимизация распределения памяти 18.1.1. Резервирование памяти в языке C++ 18.1.2. Класс allocator 18.1.3. Функции operator new() и operator delete() 18.1.4. Размещающий оператор new 18.1.5. Явный вызов деструктора 18.1.6. Операторы new и delete, специфические для класса 18.1.7. Базовый класс системы резервирования памяти 18.2. Идентификация типов времени выполнения 18.2.1. Оператор dynamiccast 18.2.2. Оператор typeid 18.2.3. Применение RTTI 18.2.4. Класс typeinfo 18.3. Указатель на член класса 18.3.1. Объявление указателя на член класса 18.3.2. Применение указателя на член класса 18.4. Вложенные классы 18.4.1. Реализация вложенного класса 18.4.2. Поиск имен в области видимости вложенного класса 18.5. Объединение: экономный класс 18.6. Локальные классы 18.7. Возможности, снижающие переносимость 18.7.1. Битовые поля 18.7.2. Спецификатор volatile 18.7.3. Директивы компоновки: extern «С» Резюме Термины ПРИЛОЖЕНИЕ А. Библиотека А. 1. Имена и заголовки стандартной библиотеки А.2. Краткий обзор алгоритмов А. 2.1. Алгоритмы поиска объекта А.2.2. Другие алгоритмы, осуществляющие только чтение А.2.3. Алгоритмы бинарного поиска А.2.4. Алгоритмы записи в элементы контейнера А.2.5. Алгоритмы сортировки и разделения А.2.6. Общие функции изменения порядка А.2.7. Алгоритмы перестановки А.2.8. Алгоритмы набора для отсортированных последовательностей А.2.9. Минимальные и максимальные значения А.2.10. Числовые алгоритмы А.3. Возвращаясь к библиотеке ввода-вывода А.3.1. Флаги формата А.3.2. Большинство манипуляторов изменяют флаг формата А.3.3. Управление форматом вывода А.3.4. Управление форматом ввода А.3.5. Бесформатные операции ввода-вывода А.3.6. Однобайтовые операторы А.3.7. Многобайтовые операторы А.3.8. Произвольный доступ к потоку А.3.9. Чтение и запись в тот же файл Предметный указатель