Книга содержит исчерпывающую информацию о языке программирования C++. Помимо «стандартных» тем, таких как объявление переменных, операторы выбора, циклы, массивы, функции и др., подробно рассматривается также работа с векторами, динамические многомерные массивы, обработка исключений, указатели и перегрузка операторов. Примеры и задания для самостоятельной работы, содержащиеся в каждой главе, помогут читателю закрепить изученный теоретический материал. Книга рассчитана на студентов и начинающих программистов, которые хотят изучить тонкости программирования на языке C++.
Содержание
Предисловие
Последовательность изучения курса
Порядок изложения материала в главах
Где получить дополнительные материалы
От издательства
Глава 1. Основы информатики и программирования на языке C++
1.1. Компьютерные системы
Аппаратное обеспечение
Программное обеспечение
Высокоуровневые языки программирования
Компиляторы
Историческая справка
1.2. Программирование и решение задач
Алгоритмы
Разработка программ
Объектно-ориентированное программирование
Жизненный цикл программного обеспечения
1.3. Введение в C++
Как возник язык C++
Пример программы на C++
Ловушка: использование /n вместо \n при переходе на новую строку
Совет программисту: синтаксис ввода и вывода
Структура простой программы на C++
Ловушка: пробел перед именем файла в директиве include
Компиляция и запуск программы на C++
Совет программисту: запуск программы
1.4. Тестирование и отладка
Виды программных ошибок
Ловушка: предполагается, что программа верна
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 2. Основные понятия C++
2.1. Переменные и операторы присваивания
Переменные
Имена и идентификаторы
Объявление переменных
Операторы присваивания
Ловушка: неинициализированные переменные
Совет программисту: используйте информативные имена
2.2. Ввод-вывод
Вывод с помощью потока cout
Директивы include и пространства имен
Управляющие последовательности
Совет программисту: заканчивайте каждую программу выводом символа новой строки
Форматирование чисел с дробной частью
Ввод с помощью потока cin
Программирование ввода и вывода
Совет программисту: переводы строки при вводе-выводе
2.3. Типы данных и выражения
Типы int и double
Другие числовые типы
Тип char
Тип bool
Совместимость типов данных
Арифметические операторы и выражения
Ловушка: целые числа и деление
Еще об операторах присваивания
2.4. Простейшее управление потоком
Простой механизм ветвления
Ловушка: сравнение нескольких значений
Ловушка: использование = вместо ==
Составные операторы
Простые механизмы циклического выполнения
Операторы инкрементирования и декрементирования
Пример: баланс кредитной карточки
Ловушка: бесконечные циклы
2.5. Некоторые особенности оформления программ
Отступы
Комментарии
Именованные константы
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 3. Процедурная абстракция и функции
3.1. Нисходящее проектирование
3.2. Стандартные функции
Использование функций
Преобразование типов
Старая форма оператора приведения типов
Ловушка: при целочисленном делении отбрасывается дробная часть
3.3. Функции, определяемые программистом
Определения функций
Две формы объявлений функций
Ловушка: неверный порядок аргументов
Синтаксис определения функции
Еще об определениях функций
3.4. Процедурная абстракция
Аналогия с черным ящиком
Совет программисту: выбор имен формальных параметров
Пример: покупка пиццы
Совет программисту: использование псевдокода
3.5. Локальные переменные
Аналогия с маленькой программой
Пример: расчет предполагаемого урожая
Глобальные константы и глобальные переменные
Формальные параметры, передаваемые по значению, являются переменными
Пространство имен std
Пример: функция, вычисляющая факториал
3.6. Перегрузка имен функций
Основные понятия перегрузки
Пример: модифицированная программа покупки пиццы
Автоматическое преобразование типов
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 4. Функции для разных подзадач
4.1. Функции типа void
Определения функций типа void
Пример: преобразование значений температуры
Оператор return в функциях типа void
4.2. Передача параметров по ссылке
Первое знакомство с передачей параметров по ссылке
Механизм передачи параметров по ссылке
Пример: функция swap_values
Смешанные списки параметров
Совет программисту: как правильно выбрать способ передачи параметра
Ловушка: локальная переменная вместо параметра, передаваемого по ссылке
4.3. Использование процедурной абстракции
Функции, вызывающие другие функции
Предусловия и постусловия
Пример: цены в супермаркете
4.4. Тестирование и отладка функций
Заглушки и отладочные программы
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 5. Потоки ввода-вывода
5.1. Потоки и основы файлового ввода-вывода
Почему для ввода-вывода используются файлы
Файловый ввод-вывод
Введение в классы и объекты
Совет программисту: проверяйте, открыт ли файл
Реализация файлового ввода-вывода
Добавление данных в файл (факультативный материал)
Использование имен файлов в качестве входных данных (факультативный материал)
5.2. Дополнительные средства выполнения потокового ввода-вывода
Форматирование выходных данных с помощью потоковых функций
Манипуляторы
Потоки в качестве аргументов функций
Совет программисту: проверка на конец файла
О пространствах имен
Пример: форматирование файла
5.3. Символьный ввод-вывод
Функции-члены get и put
Функция-член putback (факультативный материал)
Пример: проверка входных данных
Ловушка: лишний символ \n во входном потоке
Функция-член eof
Пример: редактирование текстового файла
Предопределенные символьные функции
Ловушка: функции toupper и tolower возвращают значения типа int
5.4. Наследование
Наследование для потоковых классов
Пример: еще одна функция new_line
Аргументы функции, используемые по умолчанию (факультативный материал)
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 6. Определение классов
6.1. Структуры
Структуры для разнородных данных
Ловушка: отсутствие точки с запятой в определении структуры
Структуры как аргументы функций
Совет программисту: пользуйтесь иерархическими структурами
Инициализация структур
6.2. Классы
Определение классов и функций-членов
Открытые и закрытые члены класса
Совет программисту: объявляйте все переменные-члены как закрытые
Совет программисту: определяйте аксессоры и мутаторы
Совет программисту: используйте для объектов оператор присваивания
Пример: класс BankAccount
Резюме: некоторые свойства классов
Инициализация с помощью конструкторов
Совет программисту: всегда определяйте конструктор, используемый по умолчанию
Ловушка: конструкторы без аргументов
6.3. Абстрактные типы данных
Классы как абстрактные типы данных
Пример: альтернативная реализация класса BankAccount
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 7. Поток управления программы
7.1. Использование логических выражений
Вычисление логических выражений
Ловушка: логические выражения преобразуются в значения типа int
Функции, возвращающие логические значения
Перечисления (факультативный материал)
7.2. Многонаправленное ветвление
Вложенные операторы if...else
Совет программисту: используйте скобки во вложенных операторах
Многонаправленные операторы if...else
Пример: подоходный налог штата
Оператор switch
Ловушка: забытый оператор break в операторе switch
Использование операторов switch для создания меню
Совет программисту: использование в операторах ветвления вызовов функций
Блоки
Ловушка: переменные, случайно оказавшиеся локальными
7.3. Циклы в C++
Цикл while
Операторы инкрементирования и декрементирования
Оператор for
Ловушка: лишняя точка с запятой в операторе for
Каким циклом пользоваться
Ловушка: неинициализированные переменные и бесконечные циклы
Оператор break
Ловушка: оператор break во вложенных циклах
7.4. Разработка циклов
Циклы для сумм и произведений
Завершение циклов
Вложенные циклы
Отладка циклов
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 8. Дружественные функции и перегрузка операторов
8.1. Дружественные функции
Пример: функция равенства
Применение дружественных функций
Совет программисту: определяйте и аксессоры, и дружественные функции
Совет программисту: используйте и функции-члены, и обычные функции
Пример: класс Money
Реализация функции digit_to_int (факультативный материал)
Ловушка: ведущие нули в числовых константах
Квалификатор const
Ловушка: непоследовательное использование квалификатора const
8.2. Перегрузка операторов
Реализация перегрузки операторов
Конструкторы для автоматического приведения типов
Перегрузка унарных операторов
Перегрузка операторов >> и <<
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 9. Раздельная компиляция и пространства имен
9.1. Раздельная компиляция
Еще раз об абстрактных типах данных
Пример: DigitalTime — отдельно компилируемый класс
Директива #ifndef
Совет программисту: определение других библиотек
9.2. Пространства имен
Пространства имен и директива using
Создание пространств имен
Уточнение имен
Особенности использования пространств имен (факультативный материал)
Безымянные пространства имен
Совет программисту: выбор имени для пространства имен
Ловушка: не путайте глобальное и безымянное пространства имен
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 10. Массивы
10.1. Основные понятия
Объявление массивов и доступ к их элементам
Совет программисту: используйте для работы с массивами цикл for
Ловушка: элементы массивов всегда нумеруется начиная с нуля
Совет программисту: задавайте размер массивов с помощью определенных в программе констант
Расположение массивов в памяти
Ловушка: выход индекса массива за допустимые пределы
Инициализация массивов
10.2. Массивы и функции
Элементы массива в качестве аргументов функций
Массивы в качестве аргументов функций
Квалификатор параметра const
Ловушка: несогласованное использование квалификатора const
Функции, возвращающие массивы
Пример: диаграмма производительности
10.3. Использование массивов
Частично заполненные массивы
Совет программисту: не ограничивайте количество формальных параметров
Пример: поиск в массиве
Пример: сортировка массива
10.4. Массивы и классы
Массивы структур и массивы классов
Массивы как члены классов
Пример: класс для частично заполненного массива
10.5. Многомерные массивы
Основные понятия
Параметры типа многомерных массивов
Пример: программа, использующая двухмерный массив
Ловушка: запятые между индексами массива
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 11. Строки и векторы
11.1. Массивы для хранения строк
Строковые значения и строковые переменные C
Ловушка: использование операторов = и == со строками C
Функции из библиотеки cstring
Ввод и вывод строк C
Преобразование строк C в числа
11.2. Стандартный класс string
Первое знакомство с классом string
Ввод-вывод с помощью класса string
Совет программисту: дополнительные версии функции getline
Ловушка: комбинирование ввода с помощью потока cin и функции getline
Обработка строк с помощью класса string
Пример: проверка палиндрома
Взаимное преобразование объектов типа string и строк C
11.3. Векторы
Основные понятия
Ловушка: индекс в квадратных скобках превышает размер вектора
Совет программисту: учитывайте особенности присваивания для векторов
Эффективное использование памяти
Резюме
Ответы к упражнениям для самопроверки
Практические задания
Глава 12. Указатели и динамические массивы
12.1. Указатели
Переменные-указатели
Основы управления памятью
Ловушка: зависшие указатели
Динамические и автоматические переменные
Совет программисту: определяйте типы указателей
12.2. Динамические массивы
Массивы переменных и переменные-указатели
Создание и использование динамических массивов
Арифметические операции с указателями (факультативный материал)
В книге содержится обширный справочный материал по основным элементам языка, включающий в себя наиболее употребительные функции, операторы, директивы и классы, являющиеся ядром языка С++, не зависящим от аппаратной платформы или версии языка. Последовательно и подробно изложен процесс создания программ.
Задача этой книги ? дать краткое и четкое изложение языка С++ в соответствии со стандартом ISO/IEC 14882. Учебник предназначен в первую очередь для студентов, изучающих язык ?с нуля?, но и более искушенные в программировании специалисты найдут в нем немало полезной информации.