Философия C++. Введение в стандартный C++ - В книге последовательно и методично излагаются вопросы использования объектно-ориентированного подхода к созданию программ. Автор не просто описывает различные проблемы и способы их решения, он раскрывает перед читателем особый образ мышления, не владея которым невозможно комфортно чувствовать себя в объектно-ориентированной среде. Это одна из тех книг, которые обязательно должен прочесть каждый, кто всерьез занимается разработкой программного обеспечения в C++.
Название: Философия C++. Введение в стандартный C++ Автор: Брюс Эккель Издательство: Питер Год: 2004 Страниц: 572 Формат: PDF Размер: 25,5 МБ ISBN: 5-94723-763-6 Качество: Отличное
Содержание:
Предисловие Что нового во втором издании Что попало во второй том Что должен знать читатель Изучение C++ Цели Главы Упражнения Исходные тексты Языковые стандарты Поддержка Благодарности От издателя перевода Глава 1. Знакомство с объектами Развитие абстрактных представлений Интерфейс объекта Скрытая реализация Повторное использование реализации Наследование и повторное использование интерфейса Точное и приблизительное подобие Взаимозаменяемость объектов и полиморфизм Создание и уничтожение объектов Обработка исключений Анализ и проектирование Фаза 0 - составление плана Фаза 1 - что делать Фаза 2 - как делать Фаза 3 - построение ядра Фаза 4 - итеративный перебор сценариев Фаза 5 - эволюция О пользе планирования Экстремальное программирование Начинайте с написания тестов Парное программирование Причины успеха C++ Улучшенный язык С Быстрое обучение Эффективность Простота описания и понимания системы Максимальная интеграция с библиотеками Шаблоны и повторное использование исходных текстов Обработка ошибок Масштабное программирование Стратегии перехода Рекомендации Организационные трудности Итоги Глава 2. Создание и использование объектов Процесс трансляции Интерпретаторы Компиляторы Процесс компиляции Средства раздельной компиляции Объявления и определения Компоновка Использование библиотек Первая программа на C++ Использование классов библиотеки Iostream Пространства имен Базовые сведения о строении программы Программа «Hello, world!» Запуск компилятора О потоках ввода-вывода Конкатенация символьных массивов Чтение входных данных Запуск других программ Знакомство со строками Чтение и запись файлов Знакомство с векторами Итоги Упражнения Глава 3. Элементы С в языке C++ Создание функций Возвращаемое значение функции Использование библиотеки функций С Разработка собственных библиотек Управляющие конструкции Значения true и false Цикл if-else Цикл while Цикл do-while Цикл for Ключевые слова break и continue Команда switch Ключевое слово goto Рекурсия Знакомство с операторами Приоритет Инкремент и декремент Знакомство с типами данных Встроенные типы Ключевые слова bool, true и false Спецификаторы Знакомство с указателями Модификация внешних объектов Знакомство со ссылками C++ Указатели и ссылки как модификаторы Видимость Определение переменных непосредственно перед использованием Распределение памяти Глобальные переменные Локальные переменные Статические переменные Внешние переменные Константы Квалификатор volatile Операторы и их использование Присваивание Математические операторы Операторы отношения Логические операторы Поразрядные операторы Операторы сдвига Унарные операторы Тернарный оператор Оператор запятой Характерные ошибки при использовании операторов Операторы приведения типов Явное приведение типов в C++ Оператор sizeof Ключевое слово asm Синонимы операторов Создание составных типов Определение псевдонимов Объединение переменных в структуры Перечисляемые типы Экономия памяти при использовании объединений Массивы Рекомендации по отладке Флаги отладки Преобразование переменных и выражений в строки Макрос assertO языка С Адреса функций Определение указателя на функцию Сложные определения и объявления Использование указателя на функцию Массивы указателей на функции Утилита make и управление раздельной компиляцией Команда make Make-файлы данной книги Пример make-файла Итоги Упражнения Глава 4. Абстрактное представление данных Маленькая библиотека в стиле С Динамическое распределение памяти Неверные предположения Конфликты имен Базовый объект Понятие объекта Абстрактные типы данных Подробнее об объектах Этикет использования заголовочных файлов О важности заголовочных файлов Проблема многократного объявления Директивы препроцессора #define, #ifdef и #endif Стандартное устройство заголовочного файла Пространства имен в заголовках Использование заголовков в проектах Вложенные структуры Глобальная видимость Итоги Упражнения Глава 5. Скрытие реализации Установка ограничений Управление доступом в C++ Защищенные члены Друзья Вложенные друзья Покушение на «чистоту» языка Строение объекта Класс Версия Stash с ограничением доступа Версия Stack с ограничением доступа Классы-манипуляторы Скрытие реализации Лишние перекомпиляции Итоги Упражнения Глава б. Инициализация и зачистка Гарантированная инициализация с помощью конструктора Гарантированная зачистка с помощью деструктора Исключение блока определений Циклы for Выделение памяти Класс Stash с конструктором и деструктором Класс Stack с конструктором и деструктором Агрегатная инициализация Конструктор по умолчанию Итоги Упражнения Глава 7. Перегрузка функций и аргументы по умолчанию Снова об украшении имен Перегрузка по типу возвращаемого значения Безопасность типов при компоновке Пример перегрузки Объединения Аргументы по умолчанию Заполнители в списке аргументов Выбор между перегрузкой и аргументами по умолчанию Итоги Упражнения Глава 8. Константы Подстановка значений Константы в заголовочных файлах Константы и защита данных Агрегаты Отличия от языка С Указатели Указатель на константу Константный указатель Формат определений Присваивание и проверка типов Константность символьных массивов Аргументы функций и возвращаемые значения Передача констант по значению Константное возвращаемое значение Передача и возвращение адресов Классы Ключевое слово const в классах Константы времени компиляции в классах Константные объекты и функции классов Ключевое слово volatile Итоги Упражнения Глава 9. Подставляемые функции Недостатки препроцессорных макросов Макросы и доступ Подставляемые функции Подставляемые функции внутри классов Функции доступа Функции чтения и записи Классы Stash и Stack с подставляемыми функциями Подставляемые функции и компилятор Ограничения Опережающие ссылки Скрытые операции в конструкторах и деструкторах Вынесение определений из класса Другие возможности препроцессора Вставка лексем Средства диагностики Итоги Упражнения Глава 10. Механизм контроля имен Статические элементы в языке С Статические переменные в функциях Статические объекты в функциях Управление связыванием Другие определители класса хранения Пространства имен Создание пространств имен Использование пространств имен Управление пространствами имен Статические члены в C++ Определение статических переменных классов Вложенные и локальные классы Статические функции классов Порядок инициализации статических объектов Первое решение Второе решение Альтернативные спецификации компоновки Итоги Упражнения Глава 11. Ссылки и копирующий конструктор Указатели в C++ Ссылки в C++ Ссылки в функциях Рекомендации по передаче аргументов Копирующий конструктор Передача и возврат по значению Конструирование копий Копирующий конструктор по умолчанию Альтернативы Указатели на члены классов Функции классов Пример Итоги Упражнения Глава 12. Перегрузка операторов Предупреждение Синтаксис Перегружаемые операторы Унарные операторы Бинарные операторы Аргументы и возвращаемые значения Особые операторы Неперегружаемые операторы Операторы, не являющиеся членами классов Базовые рекомендации Перегрузка присваивания Поведение функции operator= Указатели в классах Подсчет ссылок Автоматическое создание функции operator- Автоматическое приведение типа Приведение типа с использованием конструктора Оператор приведения типа Пример приведения типа Ошибки при автоматическом приведении типа Итоги Упражнения Глава 13. Динамическое создание объектов Создание объекта Динамическое выделение памяти в языке С Оператор new Оператор delete Простой пример Затраты на управление памятью Переработка ранних примеров Вызов delete void* как вероятный источник ошибки Зачистка при наличии указателей Класс Stash с указателями Операторы new и delete для массивов Указатели и массивы Нехватка памяти Перегрузка операторов new и delete Перегрузка глобальных операторов Перегрузка операторов для класса Перегрузка операторов для массивов Вызовы конструктора Операторы new и delete с дополнительными аргументами Итоги Упражнения Глава 14. Наследование и композиция Синтаксис композиции Синтаксис наследования Список инициализирующих значений конструктора Инициализация объектов внутри класса Встроенные типы в списке инициализирующих значений Объединение композиции с наследованием Автоматический вызов деструктора Порядок вызова конструкторов и деструкторов Скрытие имен Функции, которые не наследуются автоматически Наследование и статические функции классов Выбор между композицией и наследованием Выделение подтипов Закрытое наследование Защищенность Защищенное наследование Перегрузка операторов и наследование Множественное наследование Пошаговая разработка Повышающее приведение типа Понятие повышающего приведения типа Повышающее приведение типа и копирующий конструктор Снова о композиции и наследовании Повышающее приведение типа указателей и ссылок Проблемы Итоги Упражнения Глава 15. Полиморфизм и виртуальные функции Эволюция программирования на C++ Повышающее приведение типа Проблема Связывание вызовов функций Виртуальные функции Расширяемость Позднее связывание в C++ Хранение информации о типе Механизм вызова виртуальных функций Внутренние механизмы Инициализация указателя VPTR Повышающее приведение типа и объекты Виртуальные функции и эффективность Абстрактные базовые классы и чисто виртуальные функции Определения чисто виртуальных функций Наследование и таблицы виртуальных функций Расщепление объектов Перегрузка и переопределение Изменение типа возвращаемого значения Виртуальные функции и конструкторы Порядок вызова конструкторов Поведение виртуальных функций внутри конструкторов Деструкторы и виртуальные деструкторы Чисто виртуальные деструкторы Виртуальные функции в деструкторах Создание однокоренной иерархии Перегрузка операторов Понижающее приведение типа Итоги Упражнения Глава 16. Знакомство с шаблонами Контейнеры Потребность в контейнерах Общие сведения о шаблонах Многократное использование кода в С и Smalltalk Решение с применением шаблонов Синтаксис шаблонов Определения неподставляемых функций Класс IntStack в виде шаблона Константы в шаблонах Шаблоны для классов Stack и Stash Шаблон класса PStash для указателей Управление принадлежностью Хранение объектов по значению Знакомство с итераторами Класс Stack с итераторами Класс PStash с итераторами Ценность итераторов Шаблоны функций Итоги Упражнения Приложение А. Стиль программирования Общие правила Имена файлов Начальные и конечные комментарии Отступы, круглые и фигурные скобки Имена идентификаторов Порядок включения заголовочных файлов Защита заголовков Использование пространств имен Функции require() и assure() Приложение Б. Рекомендации по программированию Алфавитный указатель