Книга по Си++ как для новичков, так и для профессионалов. Книга очень
толстая и в доскональных подробностях описывает особенности языка C++,
а так же о программировании в целом. Однозначно лучший выбор, если вы
собрались на профессиональном уровне изучать язык Си...
Краткое содержание
Предисловие
Глава 1. Начальные сведения
Глава 2. Приступаем к изучению языка С++
Глава 3. Представление данных
Глава 4. Составные типы данных
Глава 5. Циклы выражения сравнения
Глава 6. Операторы ветвления и логические операции
Глава 7. Функции языка С++
Глава 8. Работа с функциями
Глава 9. Модели памяти и пространства имен
Глава 10. Объекты и классы
Глава 11. Работа с классами
Глава 12. Классы и динамическое распределение памяти
Глава 13. Наследование классов
Глава 14. Повторное использование программного кода С++
Глава 15. Дружественные конструкции, исключения и прочее
Глава 16. Класс string и стандартная библиотека шаблонов
Глава 17. Ввод вывод данных и работа с файлами
Приложения
Полное содержание
Предисловие
Глава 1. Начальные сведения
Изучение языка Си++
Философия программирования, заложенная в языке Си++
Объектно-ориентированное программирование
Обобщённое программирование
История языка Си++
Переносимость и стандарты
Методика создания программ
Создание исходного кода
Компиляция и компоновка
Соглашения, используемые в этой книге
Наша система
Глава 2. Приступаем к изучению языка С++
Начальные сведения о языке C++
Функция main()
Комментарии в языке С++
Препроцессор С++ и файл iostream
Имена заголовочных файлов
Пространства имен
Вывод данных в языке С++ с использованием объекта cout
Форматирование исходного кода С++
Стиль форматирования исходного кода программ на С++
Дополнительные сведения об операторах языка С++
Операторы объявления и переменные
Оператор присваивания
Важный момент, связанный с объектом cout
Еще несколько операторов языка С++
Применение объекта cin
И снова объект cout
Несколько слов о классах
Функции
Применение функций с возвращаемым значением
Разновидности функций
Функции, определяемые пользователем
Определяемая пользователем функция с возвращаемым значением
Основные сведения об операторах
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 3. Представление данных
Простые переменные
Имена переменных
Целочисленные типы данных
Типы данных short int и long
Типы данных без знака
Какой тип выбрать?
Целочисленные константы
Определение типа константы в языке С++
Тип данных сhar: символы и малые целые числа
Универсальные имена символов
Новый тип данных bool
Квалификатор const
Числа с плавающей точкой
Запись чисел с плавающей точкой
Типы данных с плавающей точкой
Константы с плавающей точкой
Преимущества и недостатки типов данных с плавающей точкой
Арифметические операции языка С++
Приоритет операций и ассоциативность
Разновидности операции деления
Операция деления по модулю
Преобразования типов данных
Преобразования данных в выражениях
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 4. Составные типы данных
Краткий обзор массивов
Правила инициализации массивов
Строки
Конкатенация строк
Использование строк в массиве
Смешанный ввод строк и чисел
Краткий обзор структур
Другие свойства структур
Массивы структур
Битовые поля
Объединения
Перечисления
Установка значений перечислителей
Диапазоны значений для перечислений
Указатели и свободная память
Объявление и инициализация указателей
Указатели и числа
Выделение памяти с помощью оператора new
Высвобождение памяти с помощью оператора delete
Использование оператора new для создания динамических массивов
Указатели, массивы и арифметика указателей
Указатели и строки
Использование оператора new для создания динамических структур
Автоматическое, статическое и динамическое выделение памяти
Автоматические переменные
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 5. Циклы и выражения сравнения
Обзор возможностей цикла for
Составные части цикла for
И опять о цикле for
Изменение шага цикла
Доступ к символам строки с помощью цикла for
Операторы инкремента (++) и декремента (--)
Комбинированные операторы присваивания
Составные операторы или блоки
Оператор "запятая" (или дополнительные синтаксические приемы)
Выражения сравнения
Типичная ошибка программирования
Сравнение строк
Цикл while
Сравнение циклов for и while
Пауза
Цикл do while
Циклы и ввод текста
Применение простого оператора cin для ввода данных
На помощь приходит функция cin.get(char)
Какую из функций cin.get() выбрать?
Условие конца файла
Еще одна разновидность функции cin.get()
Вложенные циклы и двумерные массивы
Инициализация двумерного массива
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 6. Операторы ветвления и логические операции
Оператор if
Оператор if else
Форматирование операторов if else
Конструкция if else if else
Логические выражения
Операция логическое ИЛИ: ||
Операция логическое И: &&
Операция логическое НЕ: !
Немного о логических операциях
Альтернативные представления
Библиотека символьных функций cctype
Оператор ?:
Оператор switch
Операторы switch и if else
Операторы break и continue
Циклы считывания чисел
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 7. Функции языка C++
Обзор функций
Определение функции
Создание прототипов и вызов функций
Аргументы функции и передача по значению
Функции с несколькими аргументами
Еще одна функция с двумя аргументами
Функции и массивы
Применение указателей в функциях, обрабатывающих массивы
Особенности использования массивов в качестве аргументов
Другие примеры функций, выполняющих обработку массивов
Функции, в которых используются диапазоны массивов
Указатели и спецификатор const
Функции и двумерные массивы
Функции и строки в стиле языка С
Функции, возвращающие строки
Функции и структуры
Передача и возврат структур
Еще один пример
Передача адресов структур
Рекурсия
Указатели на функции
Назначение указателя на функцию
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 8. Работа с функциями 330
Встроенные функции
Ссылочные переменные
Создание ссылочных переменных
Ссылки в роли параметров функции
Свойства и особенности ссылок
Использование ссылок при работе со структурами
Аргументы, принимаемые по умолчанию
Полиморфизм или перегрузка функций
Пример перегрузки функций
Когда целесообразно использовать перегрузку функций
Шаблоны функций
Перегружаемые шаблоны
Явные специализации
Специализация третьего поколения (стандарт C++ ISO/ANSI)
Создание экземпляров и специализация
Выбор функций
Пример использования правил частичного упорядочивания
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 9. Модели памяти и пространства имен
Раздельная компиляция
Управление заголовочными файлами
Классы памяти, диапазоны доступа и связывание
Диапазон доступа и связывание
Автоматический класс памяти
Переменные со статическим классом памяти
Статический класс памяти, внешнее связывание
Статический класс памяти, внутреннее связывание
Статический класс памяти, без связывания
Спецификаторы и классификаторы
Функции и связывание
Языковое связывание
Схемы распределения памяти и динамическое распределение
Пространства имен
Традиционные пространства имен языка C++
Новые свойства пространств имен
Пространства имен и будущее
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 10. Объекты и классы
Процедурное и объектно-ориентированное программирование
Абстрагирование и классы
Что представляет собой тип
Класс
Реализация функций-элементов класса
Использование классов
Что мы узнали на текущий момент
Деструкторы и конструкторы классов
Объявление и определение конструкторов
Использование конструктора
Конструктор, заданный по умолчанию
Деструкторы
Давайте усовершенствуем класс Stock
Обзор конструкторов и деструкторов
Работа с указателем this
Массив объектов
Диапазон доступа класса
Константы с диапазоном доступа класса
Абстрактные типы данных
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 11. Работа с классами
Перегрузка операций
Время в нашем распоряжении
Добавление операции сложения
Ограничения при выполнении перегрузки
Другие перегруженные операции
Использование дружественных структур
Создание дружественных конструкций
Общий вид дружественной конструкции: перегрузка операции <<
Перегруженные операции: дружественные функции или обычные?
Еще о перегрузке: класс Vector
Использование элементов состояния
Еще немного о перегрузке
Комментарий к реализации
Применение класса Vector к решению задачи случайного блуждания
Автоматические преобразования и приведение типов для классов
Функции преобразования
Преобразования и дружественные конструкции
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 12. Классы и динамическое распределение памяти
Динамическая память и классы
Обзорный пример и элементы статических классов
Неявные функции-элементы
Новый усовершенствованный класс String
Узелки на память: когда использовать оператор new в конструкторах
Применение указателей при работе с объектами
Обзор технических приемов программирования
Эмуляция очереди
Класс Queue
Класс Customer
Эмуляция
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 13. Наследование классов
Простой базовый класс
Порождение класса
Конструктор: доступ
Использование производного класса
Особые связи
Наследование - отношение is-a
Полиморфное открытое наследование
Разработка наших классов
Статическое и динамическое связывание
Совместимость типов указателей и ссылок
Виртуальные функции и динамическое связывание
Зачем нужны два вида связывания?
Как работают виртуальные функции
Что следует знать о виртуальных функциях
Управление доступом - protected
Абстрактные базовые классы
Применение концепции абстрактных базовых классов
Наследование и динамическое распределение памяти
Случай 1. В производном классе не используется оператор new
Случай 2. В производном классе используется оператор new
Пример наследования с динамическим распределением памяти
и дружественными конструкциями
Обзор структуры класса
Функции-элементы, которые генерирует компилятор
Другие соображения по поводу методов класса
Соображения по поводу открытого наследования
Итоговый анализ функций класса
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 14. Повторное использование программного кода в C++
Классы, включающие элементы объектов
Класс ArrayDb
Пример класса Student
Закрытое наследование
Пример класса Student (новая версия)
Множественное наследование
Определение количества рабочих
Выбор метода
Некоторые итоги по теме множественного наследования
Шаблоны классов
Определение шаблона класса
Использование шаблонного класса
Более подробное рассмотрение шаблона класса
Шаблон массива и аргументы, не являющиеся типами
Универсальный характер шаблонов
Специализации шаблонов
Шаблоны-элементы
Шаблоны в качестве параметров
Шаблоны классов и дружественные элементы
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 15. Дружественные конструкции, исключения и прочее
Дружественные структуры
Дружественные классы
Дружественные функции-элементы
Другие дружественные отношения
Вложенные классы
Вложенные классы и доступ
Вложение в шаблоне
Обработка исключительных ситуаций
Примечания к программе
Механизм обработки исключительных ситуаций
Примечания к программе
Разносторонний характер исключений
Исключения и классы
Исключения и наследование
Класс exception
Исключение bad_alloc и оператор new
Проблемы, связанные с обработкой исключительных ситуаций
Замечание об исключениях
Библиотека RTTI
Назначение RTTI
Принципы функционирования RTTI
Операторы приведения типов
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 16. Класс string и стандартная библиотека шаблонов
Класс string
Создание строки
Реализация ввода в классе string
Работа со строками
Класс auto_ptr
Использование шаблона auto_ptr
Некоторые замечания относительно auto_ptr
Стандартная библиотека шаблонов
Шаблон класса vector
Операции, допустимые при работе с шаблонами vector
Дополнительные операции с векторами
Обобщенное программирование
Почему именно итераторы?
Типы итераторов
Типы контейнеров
Последовательности
Класс vector
Класс deque
Класс list
Класс queue
Класс priority_queue
Класс stack
Ассоциативные контейнеры
Функциональные объекты (функторы)
Концепции функторов
Предопределенные функторы
Адаптируемые функторы и функции-адаптеры
Алгоритмы
Группы алгоритмов
Общие свойства
STL и класс string
Функции и контейнерные методы
Использование STL
Другие библиотеки
Резюме
Вопросы для повторения
Упражнения по программированию
Глава 17. Ввод/вывод данных и работа с файлами
Обзор ввода/вывода данных в С++
Потоки и буферы
Потоки, буферы и файл iostream
Перенаправление
Вывод с помощью cout
Перегруженный оператор <<
Другие методы класса ostream
Очистка буфера вывода
Форматирование вывода с помощью cout
Ввод данных с помощью cin
Как cin >> рассматривает поток ввода
Состояния потока
Другие методы класса istream
Другие методы класса istream
Ввод/вывод файлов
Простая работа с файлами
Открытие нескольких файлов
Работа в режиме командной строки
Проверка потока и функция is_open()
Режимы файлов
Произвольный доступ к файлам
Внутреннее форматирование
Что дальше?
Резюме
Вопросы для повторения
Упражнения по программированию
Приложение A. Системы счисления
Приложение B. Ключевые слова языка C++
Приложение C. Таблица кодов ASCII
Приложение D. Приоритет операций
Приложение E. Другие операции
Приложение F. Шаблон класса STRING
Приложение G. Методы и функции библиотеки STL
Приложение H. Рекомендуемая литература
Приложение I. Преобразование программного кода в соответствии со стандартом ANSI/ISO C++
В книге всегда идёт повествование о C++, но в каждом разделе (особенно первых) попутно раскрывается информация об отличиях с простым С, если таковые есть.