С++ для начинающих

       

С++ для начинающих

Предисловие
Структура книги

Изменения в третьем издании
Будущее С++
Благодарности
Благодарности во втором издании
Список литературы
Начинаем

Решение задачи


Программа на языке C++
Порядок выполнения инструкций
Директивы препроцессора

Немного о комментариях
Первый взгляд на ввод/вывод
Файловый ввод/вывод
Краткий обзор С++
Встроенный тип данных “массив”
Динамическое выделение памяти и указатели

Объектный подход

Объектно-ориентированный подход

Использование шаблонов
Использование исключений
Использование пространства имен

Стандартный массив – это вектор
Типы данных С++
Литералы

Переменные
Что такое переменная
Имя переменной
Определение объекта
Указатели

Строковые типы
Встроенный строковый тип
Класс string
Спецификатор const

Ссылочный тип
Тип bool
Перечисления
Тип “массив”

Многомерные массивы
Взаимосвязь массивов и указателей
Класс vector
Класс complex
Директива typedef

Спецификатор volatile
Класс pair
Типы классов

Выражения
Что такое выражение?
Арифметические операции
Операции сравнения и логические операции
Операции присваивания

Операции инкремента и декремента
Операции с комплексными числами
Условное выражение
Оператор sizeof

Операторы new и delete
Оператор “запятая”
Побитовые операторы
Класс bitset
Приоритеты

Преобразования типов
Неявное преобразование типов
Арифметические преобразования типов

С++ для начинающих

Явное преобразование типов
Устаревшая форма явного преобразования
Пример: реализация класса Stack

Инструкции
Простые и составные инструкции
Инструкции объявления
Инструкция if

Инструкция switch
Инструкция цикла for
Инструкция while

Инструкция do while
Инструкция break
Инструкция continue
Инструкция goto
Пример связанного списка

Обобщенный список
Абстрактные контейнерные типы
Система текстового поиска
Вектор или список?
Как растет вектор?

Как определить последовательный контейнер?
Итераторы
Операции с последовательными контейнерами

Удаление
Присваивание и обмен
Обобщенные алгоритмы
Читаем текстовый файл
Выделяем слова в строке

Обрабатываем знаки препинания
Приводим слова к стандартной форме
Дополнительные операции со строками

Строим отображение позиций слов
Определение объекта map и заполнение его элементами
Поиск и извлечение элемента отображения
Навигация по элементам отображения
Словарь
Удаление элементов map

Построение набора стоп-слов
Определение объекта set и заполнение его элементами
Поиск элемента
Навигация по множеству
Окончательная программа

Контейнеры multimap и multiset
Стек
Очередь и очередь с приоритетами
Вернемся в классу iStack

Функции
Введение
Прототип функции
Тип возвращаемого функцией значения
Список параметров функции
Проверка типов формальных параметров
Передача аргументов

Параметры-ссылки
Параметры-ссылки и параметры-указатели
Параметры-массивы
Абстрактные контейнерные типы в качестве параметров
Значения параметров по умолчанию

Многоточие
Возврат значения
Передача данных через параметры и через глобальные объекты
Рекурсия
Встроенные функции

Директива связывания extern "C" *
Функция main(): разбор параметров командной строки
Класс для обработки параметров командной строки

Указатели на функции

С++ для начинающих

Тип указателя на функцию
Инициализация и присваивание
Вызов
Массивы указателей на функции
Параметры и тип возврата
Указатели на функции, объявленные как extern "C"

Область видимости и время жизни
Область видимости
Локальная область видимости
Глобальные объекты и функции
Объявления и определения
Сопоставление объявлений в разных файлах
Несколько слов о заголовочных файлах

Локальные объекты
Автоматические объекты
Регистровые автоматические объекты
Статические локальные объекты
Динамически размещаемые объекты
Динамическое создание и уничтожение единичных объектов

Шаблон auto_ptr *
Динамическое создание и уничтожение массивов
Динамическое создание и уничтожение константных объектов
Оператор размещения new *

Определения пространства имен *
Определения пространства имен
Оператор разрешения области видимости
Вложенные пространства имен
Определение члена пространства имен
Определение члена пространства имен - 2
ПОО и члены пространства имен

Безымянные пространства имен
Использование членов пространства имен *
Псевдонимы пространства имен
Using-объявления
Using-директивы
Стандартное пространство имен std

Перегруженные функции
Объявления перегруженных функций
Зачем нужно перегружать имя функции
Как перегрузить имя функции
Когда не надо перегружать имя функции
Перегрузка и область видимости *
Директива extern "C" и перегруженные функции *

Указатели на перегруженные функции *
Безопасное связывание *
Три шага разрешения перегрузки
Преобразования типов аргументов *
Подробнее о точном соответствии

Подробнее о расширении типов
Подробнее о стандартном преобразовании
Ссылки

Детали разрешения перегрузки функций
Функции-кандидаты
Устоявшие функции
Наилучшая из устоявших функция

Аргументы со значениями по умолчанию
Шаблоны функций
Определение шаблона функции

Конкретизация шаблона функции
Вывод аргументов шаблона *
Явное задание аргументов шаблона *

Модели компиляции шаблонов *
Модель компиляции с включением
Модель компиляции с разделением
Явные объявления конкретизации
Явная специализация шаблона *

Перегрузка шаблонов функций *
Разрешение перегрузки при конкретизации *

Разрешение имен в определениях шаблонов *
.Пространства имен и шаблоны функций *

.Пример шаблона функции
Обработка исключений
Возбуждение исключения
Try-блок

С++ для начинающих


Перехват исключений
Объекты-исключения
Раскрутка стека
Повторное возбуждение исключения
Перехват всех исключений
Спецификации исключений

Спецификации исключений и указатели на функции
Исключения и вопросы проектирования
Обобщенные алгоритмы
Краткий обзор
Использование обобщенных алгоритмов

Объекты-функции
Предопределенные объекты-функции
Арифметические объекты-функции

Сравнительные объекты-функции
Логические объекты-функции
Адаптеры функций для объектов-функций
Реализация объекта-функции
Еще раз об итераторах
Итераторы вставки
Обратные итераторы
Потоковые итераторы
Итератор istream_iterator
Итератор ostream_iterator

Пять категорий итераторов
Обобщенные алгоритмы
Алгоритмы поиска
Алгоритмы сортировки и упорядочения
Алгоритмы удаления и подстановки
Алгоритмы перестановки
Численные алгоритмы
Алгоритмы генерирования и модификации

Алгоритмы сравнения
Алгоритмы работы с множествами
Алгоритмы работы с хипом
.Когда нельзя использовать обобщенные алгоритмы
Операция list_merge()
Операция list::remove()
Операция list::remove_if()
Операция list::reverse()
Операция list::sort()
Операция list::splice()

Операция list::unique()
Классы
Определение класса
Данные-члены
Функции-члены
Доступ к членам
Друзья
Объявление и определение класса

Объекты классов
Функции-члены класса
Когда использовать встроенные функции-члены
Доступ к членам класса
Закрытые и открытые функции-члены
Специальные функции-члены
Функции-члены со спецификаторами const и volatile

Функции-члены со спецификаторами const и volatile - 2
Объявление mutable
Неявный указатель this
Когда использовать указатель this
Статические члены класса

Статические функции-члены
Указатель на член класса
Тип члена класса
Работа с указателями на члены класса
Указатели на статические члены класса

Объединение – класс, экономящий память
Битовое поле– член, экономящий память
Область видимости класса *

Разрешение имен в области видимости класса
.Вложенные классы *
.Разрешение имен в области видимости вложенного класса

.Классы как члены пространства имен *
.Локальные классы *
Инициализация, присваивание и уничтожение класса
Инициализация класса
Конструктор класса

Конструктор по умолчанию
Ограничение прав на создание объекта
Копирующий конструктор
Деструктор класса

Явный вызов деструктора
Опасность увеличения размера программы
Массивы и векторы объектов
Инициализация массива, распределенного из хипа *
Вектор объектов

Список инициализации членов
Почленная инициализация *
Инициализация члена, являющегося объектом класса

С++ для начинающих

Инициализация члена, являющегося объектом класса - 3

Почленное присваивание *
Соображения эффективности *
Перегруженные операторы и определенные пользователем преобразования
Перегрузка операторов

Члены и не члены класса
Имена перегруженных операторов
Разработка перегруженных операторов
Друзья
Оператор =

Оператор взятия индекса
Оператор вызова функции
Оператор “стрелка”
Операторы инкремента и декремента
Операторы new и delete

Операторы new[ ] и delete [ ]
Оператор размещения new() и оператор delete()
Определенные пользователем преобразования
Конвертеры

Конструктор как конвертер
.Выбор преобразования *
.Еще раз о разрешении перегрузки функций
.Функции-кандидаты

.Функции-кандидаты для вызова функции в области видимости класса
.Ранжирование последовательностей определенных пользователем преобразований
.Разрешение перегрузки и функции-члены *
.Объявления перегруженных функций-членов
.Функции-кандидаты
.Устоявшие функции

.Разрешение перегрузки и операторы *
.Операторные функции-кандидаты
.Устоявшие функции
.Неоднозначность
Шаблоны классов
Определение шаблона класса

Определения шаблонов классов Queue и QueueItem
Конкретизация шаблона класса
Аргументы шаблона для параметров-констант

Аргументы шаблона для параметров-констант - 2
Функции-члены шаблонов классов
Функции-члены шаблонов Queue и QueueItem
Объявления друзей в шаблонах классов
Объявления друзей в шаблонах Queue и QueueItem

Статические члены шаблонов класса
Вложенные типы шаблонов классов
Шаблоны-члены
Шаблоны классов и модель компиляции *

Модель компиляции с включением
Явные объявления конкретизации
Специализации шаблонов классов *

.Частичные специализации шаблонов классов *
.Частичные специализации шаблонов классов * - 2
.Разрешение имен в шаблонах классов *
.Пространства имен и шаблоны классов
.Шаблон класса Array

Наследование и подтипизация классов
Определение иерархии классов

Объектно-ориентированное проектирование
Идентификация членов иерархии
Определение базового класса

Определение производных классов
Резюме
Доступ к членам базового класса

Конструирование базового и производного классов
Конструктор базового класса
Конструктор производного класса
Альтернативная иерархия классов
Отложенное обнаружение ошибок
Деструкторы

С++ для начинающих

Деструкторы - 2
Виртуальные функции в базовом и производном классах

Виртуальный ввод/вывод
Чисто виртуальные функции
Статический вызов виртуальной функции
Виртуальные функции и аргументы по умолчанию

Виртуальные деструкторы
Виртуальная функция eval()
Почти виртуальный оператор new
Виртуальные функции, конструкторы и деструкторы

Почленная инициализация и присваивание *
Управляющий класс UserQuery
Определение класса UserQuery

Соберем все вместе
Множественное и виртуальное наследование
Готовим сцену

Множественное наследование
Открытое, закрытое и защищенное наследование

Наследование и композиция
Открытие отдельных членов
Защищенное наследование
Композиция объектов
Область видимости класса и наследование

Область видимости класса при множественном наследовании
Виртуальное наследование *
Объявление виртуального базового класса
Специальная семантика инициализации

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

Порождение класса отсортированного массива
Класс массива с множественным наследованием
Применение наследования в C++
Идентификация типов во время выполнения

Оператор dynamic_cast
Оператор typeid
Класс type_info

Исключения и наследование
Исключения, определенные как иерархии классов
Возбуждение исключения типа класса
Обработка исключения типа класса
Объекты-исключения и виртуальные функции
Раскрутка стека и вызов деструкторов
Спецификации исключений

Конструкторы и функциональные try-блоки
Иерархия классов исключений в стандартной библиотеке C++
Разрешение перегрузки и наследование *
Функции-кандидаты

Устоявшие функции и последовательности пользовательских преобразований
Наилучшая из устоявших функций
Библиотека iostream
Оператор вывода

Ввод
Строковый ввод

Дополнительные операторы ввода/вывода
Перегрузка оператора вывода

Перегрузка оператора ввода
Файловый ввод/вывод

С++ для начинающих

Состояния потока
Строковые потоки
Состояние формата

.Сильно типизированная библиотека
Приложение Обобщенные алгоритмы в алфавитном порядке
Алгоритм accumulate()
Алгоритм adjacent_difference()
Алгоритм adjacent_find()
Алгоритм binary_search()
Алгоритм copy()

Алгоритм copy_backward()
Алгоритм count()
Алгоритм count_if()
Алгоритм equal()
Алгоритм equal_range()
Алгоритм fill()
Алгоритм fill_n()
Алгоритм find()

Алгоритм find_if()
Алгоритм find_end()
Алгоритм find_first_of()
Алгоритм for_each()
Алгоритм generate()
Алгоритм generate_n()
Алгоритм includes()
Алгоритм inner_product()
Алгоритм inplace_merge()

Алгоритм iter_swap()
Алгоритм lexicographical_compare()
Алгоритм lower_bound()
Алгоритм max()
Алгоритм max_element()
Алгоритм min()
Алгоритм min_element()
Алгоритм merge()

Алгоритм mismatch()
Алгоритм next_permutation()
Алгоритм nth_element()
Алгоритм partial_sort()
Алгоритм partial_sort_copy()
Алгоритм partial_sum()
Алгоритм partition()
Алгоритм prev_permutation()
Алгоритм random_shuffle()

Алгоритм remove()
Алгоритм remove_copy()
Алгоритм remove_if()
Алгоритм remove_copy_if()
Алгоритм replace()
Алгоритм replace_copy()
Алгоритм replace_if()
Алгоритм replace_copy_if()
Алгоритм reverse()
Алгоритм reverse_copy()

Алгоритм rotate()
Алгоритм rotate_copy()
Алгоритм search()
Алгоритм search_n()
Алгоритм set_difference()
Алгоритм set_intersection()
Алгоритм set_symmetric_difference()
Алгоритм set_union()
Алгоритм sort()

Алгоритм stable_partition()
Алгоритм stable_sort()
Алгоритм swap()
Алгоритм swap_ranges()
Алгоритм transform()
Алгоритм unique()
Алгоритм unique_copy()
Алгоритм upper_bound()
Алгоритмы для работы с хипом
Алгоритм make_heap()

Алгоритм pop_heap()
Алгоритм push_heap()
Алгоритм sort_heap()
Предметный указатель


Расширяемый язык разметки далее
Разработка компиляторов далее