Дэвис Стефан Р.
C++ для \"чайников\".
Книга, которая у вас в руках, — это введение в язык программирования C++. Она начинается с азов: от читателя не требуется каких-либо знаний в области программирования. В отличие от других книг по программированию на C++, в этой книге вопрос \"почему\" считается не менее важным, чем вопрос \"как\". И поэтому перед изложением конкретных особенностей языка C++ читателю разъясняется, как они действуют в целом. Ведь каждая структурная особенность языка — это отдельный штрих единой картины. Прочитав книгу, вы сможете написать на C++ вразумительную программу и, что не менее важно, будете понимать, почему и как она работает.
Книга рассчитана на пользователей с различным уровнем подготовки.
Введение.
Об этой книге.
О чем эта книга.
Что такое C++.
Соглашения, используемые в книге.
Что можно не читать.
Нелепые предположения.
Как организована эта книга.
В конце каждой части... (BUDGET)
Часть 1. Первое знакомство с C++.
Часть 2. Становимся программистами.
Часть 3. \"Классическое\" программирование.
Часть 4. Наследование.
Часть 5. Полезные особенности.
Часть 6. Великолепная десятка.
Использованные в этой книге пиктограммы.
Часть I. Первое знакомство с C++.
Глава 1. Написание вашей первой программы.
Постигая концепции C++.
Что такое программы.
Как пишут программы.
Создание первой программы.
Введение кода.
Создание выполнимого файла.
Выполнение программы.
GNU — это не Windows.
Помощь в GNU C++.
Разбор программ.
Определение структуры программ C++.
Использование в исходном коде комментариев.
Использование инструкций в программах.
Объявления.
Генерирование вывода.
Вычисление выражений.
Сохранение результатов выражения.
Обзор программы Convert продолжается...
Глава 2. Премудрости объявления переменных.
Объявление переменных.
Объявление разных типов переменных.
Ограничения, налагаемые на целые числа в C++.
Решение проблемы усечения дробной части.
Ограничения, налагаемые на числа с плавающей точкой.
Объявления типов переменных.
Типы констант.
Специальные символы.
Выражения смешанного типа.
Глава 3. Выполнение математических операций.
Бинарная арифметика.
Анализ выражений.
Определение порядка операций.
Выполнение унарных операций.
Использование операторов присвоения.
Глава 4. Выполнение логических операций.
Зачем нужны логические операторы.
Использование простых логических операторов.
Логические операции и действительные переменные.
Бинарные числа в C++.
Десятичная система счисления.
Другие системы счисления.
Двоичная система счисления.
Выполнение битовых логических операций.
Битовые операции с одним битом.
Использование битовых операторов.
Простой пример.
Зачем придуманы эти глупые операторы.
Глава 5. Операторы управления программой.
Управление ходом программы с помощью команд ветвления.
Выполнение циклов.
Цикл while
Использование операторов инкремента и декремента.
Использование цикла for
Избегайте бесконечных циклов.
Специальные операторы циклов.
Вложенные команды управления.
Инструкция выбора.
Часть II. Становимся программистами.
Глава 6. Создание функций.
Написание и использование функций.
Подробный анализ функций.
Простые функции.
Функции с аргументами.
Перегрузка функций.
Определение прототипов функций.
Хранение переменных в памяти.
Глава 7. Хранение последовательностей в массивах.
Преимущества массивов.
Работа с массивами.
Инициализация массива.
Выход за границы массива.
Использовать ли массивы.
Определение и использование массивов.
Использование символьных массивов.
Управление строками.
Написание функции, соединяющей две строки.
Функции C++ для работы со строками.
Обработка символов типа wchai i.
Устранение устаревших функций вывода.
Глава 8. Первое знакомство с указателями в C++.
Что такое адрес.
Использование указателей.
Сравнение указателей и почтовых адресов.
Использование разных типов указателей.
Передача указателей функциям.
Передача аргументов по значению.
Передача значений указателей.
Передача аргументов по ссылке.
Использование кучи.
Область видимости.
Проблемы области видимости.
Использование блока памяти.
Глава 9. Второе знакомство с указателями.
Операции с указателями.
Повторное знакомство с массивами в свете указателей.
Использование операций над указателями для адресации внутри массива.
Использование указателей для работы со строками.
Операции с указателями других типов.
Отличия между указателями и массивами.
Объявление и использование массивов указателей.
Использование массивов строк.
Доступ к аргументам main()
Глава 10. Прочие функциональные особенности.
Зачем разбивать программу на модули.
Пример большой программы.
Разделение программы FunctionDemo.
Отделение модуля sumSequenceQ.
Создание модуля MainModule.cpp
Создание файла проекта.
Создание файла проекта в GNU C++.
Создание файла проекта в Visual C++.
Использование директивы #include.
Использование стандартных библиотек C++.
Глава П. Отладка программ на C++.
Определение типа ошибки.
Использование отладочной печати.
Выявление \"жучка\" № 1.
Выявление \"жучка\" № 2.
Использование отладчика.
Что такое отладчик.
Выбор отладчика.
Запуск тестовой программы.
Пошаговое выполнение программы.
Пошаговый режим с входом в функции.
Использование точек останова.
Просмотр и редактирование переменных.
Первая программа BUDGET.
Часть III. \"Классическое\" программирование.
Глава 12. Знакомство с объектно-ориентированным программированием.
Микроволновые печи и уровни абстракции.
Приготовление блюд с помошью функций.
Приготовление \"объектно-ориентированных\" блюд.
Классифицирование микроволновых печей.
Зачем нужна классификация.
Глава 13. Классы в C++.
Введение в классы.
Формат класса.
Обращение к членам класса.
Пример программы.
Глава 14. Работа с классами.
Активизация объектов.
Моделирование реальных объектов.
Зачем нужны функции-члены.
Добавление функции-члена.
Создание функции-члена.
Именование членов класса.
Вызов функций-членов.
Обращение к функииям-членам.
Доступ к членам из функции-члена.
Разрешение области видимости.
Определение функции-члена.
Определение функций-членов вне класса.
Перегрузка функций-членов.
Глава 15. Создание указателей на объекты.
Определение массивов указателей.
Объявление массивов объектов.
Объявление указателей на объекты.
Разыменование указателей на объекты.
Использование стрелок.
Передача объектов функциям.
Вызов функции с передачей объекта по значению.
Вызов функции с передачей указателя.
Зачем передавать указатель.
Передача объекта по ссылке.
Возврат к куче.
Использование связанных списков.
Массив.
Связанный список.
Другие операции над связанным списком.
Свойства связанных списков.
Программа LinkedListData.
Глава 16. Защищенные члены класса: не беспокоить!
Защищенные члены.
Зачем нужны защищенные члены.
Как устроены защищенные члены.
Чем хороши защищенные члены.
Защита внутреннего устройства класса.
Классы с ограниченным интерфейсом.
Обращение к защищенным членам.
\"Друг всегда уступить готов место в шлюпке и круг...\".
Глава 17. Создание и удаление объектов: конструктор и деструктор.
Создание объектов.
Использование конструкторов.
Зачем нужны конструкторы.
Работа с конструкторами.
Что такое деструктор.
Зачем нужен деструктор.
Работа с деструкторами.
Глава 18. Аргументация конструирования.
Как снабдить конструктор аргументами.
Зачем конструкторам нужны аргументы.
Как использовать конструктор с аргументами.
Перегрузка конструктора.
Определение конструкторов по умолчанию.
Конструирование членов класса.
Управление последовательностью конструирования.
Локальные объекты создаются последовательно.
Статические объекты создаются один раз.
Все глобальные объекты создаются до вызова main()
Порядок создания глобальных объектов не определен.
Члены создаются в порядке их объявления.
Деструкторы удаляют объекты в порядке, обратном порядку их создания.
Глава 19. Копирующий конструктор.
Копирование объекта.
Зачем это нужно.
Использование конструктора копирования.
Автоматический конструктор копирования.
\"Мелкие\" и \"глубокие\" копии.
Временные объекты.
Глава 20. Статические члены.
Определение статических членов.
Зачем нужны статические данные.
Использование статических членов.
Обращение к статическим данным-членам.
Применение статических данных-членов.
Объявление статических функций-членов.
Бюджет с классами — BUDGET2.CPP
Часть IV. Наследование.
Глава 21. Наследование классов.
Зачем нужно наследование.
Как наследуется класс.
Конструирование подкласса.
Отношение СОДЕРЖИТ.
Глава 22. Знакомство с виртуальными функциями-членами: настоящие ли они.
Зачем нужен полиморфизм.
Как работает полиморфизм.
Полиморфное приготовление закуски.
Когда функция не является виртуальной.
Виртуальные особенности.
Глава 23. Разложение классов.
Разложение.
Реализация абстрактных классов.
Концепция абстрактных классов.
Создание полноценного класса из абстрактного.
Передача абстрактных классов.
Нужны ли чисто виртуальные функции.
Рационализация бюджета: BUDGET3.CPP
Часть V. Полезные особенности.
Глава 24. Перегрузка операторов.
Перегрузка операторов: давайте жить в гармонии.
Операторная функция.
А подробнее?
operator +().
operator *-+().
Операторы как функции-члены.
Еше одна перегрузка.
Перегрузка операторов с помощью неявного преобразования типов.
Приведение объектов пользовательских типов.
Оператор явного преобразования.
Правила для неявных преобразований.
Глава 25. Перегрузка оператора присвоения.
Опасная работа, коварная работа, кошмарная работа...
Знакомство с перегрузкой оператора присвоения.
Глубокая проблема создания мелких копий.
Почленный подход к С.
Возврат результата присвоения.
Зашита членов.
Глава 26. Использование потоков ввода-вывода.
Нырнем в поток...
Знакомство с подклассами fstream.
Подклассы strstream.
Манипулирование манипуляторами.
Написание собственных операторов вставки.
Создание \"умных\" операторов.
Глава 27. Обработка ошибок и исключения.
Зачем нужен новый механизм обработки ошибок.
Механизм исключительных ситуаций.
Так что же мы будем бросать?
Глава 28. Множественное наследование.
Механизм множественного наследования.
Устранение неоднозначностей множественного наследования.
Виртуальное наследование.
Конструирование объектов.
Отрицательные стороны множественного наследования.
Часть VI. Великолепная десятка.
Глава 29. Десять способов избежать ошибок.
Включение всех предупреждений и сообщений об ошибках.
Добейтесь чистой компиляции.
Используйте последовательный стиль программирования.
Ограничивайте видимость.
Комментируйте свою программу.
Хотя бы один раз выполните программу пошагово.
Избегайте перегрузки операторов.
Работа с кучей.
Используйте исключительные ситуации для обработки ошибок.
Избегайте множественного наследования.
Приложение А. Словарь терминов.
Предметный указатель.