Бьерн Страуструп. Язык программирования С Второе дополненное издание
Скачать 2.87 Mb.
|
Бьерн Страуструп. Язык программирования С++ Второе дополненное издание Языки программирования / С++ Бьерн Страуструп. Язык программирования С++ 2 Оглавление Оглавление Оглавление Оглавление ПРЕДВАРИТЕЛЬНЫЕ ЗАМЕЧАНИЯ..................................................................................................................8 Об авторе книги: ..............................................................................................................................................8 ПРЕДИСЛОВИЕ...................................................................................................................................................9 Выражение признательности .......................................................................................................................10 ПРЕДИСЛОВИЕ К ПЕРВОМУ ИЗДАНИЮ ......................................................................................................11 Выражение признательности .......................................................................................................................11 ПРЕДВАРИТЕЛЬНЫЕ ЗАМЕЧАНИЯ................................................................................................................12 Структура книги............................................................................................................................................12 Замечания по реализации................................................................................................................................13 Упражнения....................................................................................................................................................13 Замечания по проекту языка..........................................................................................................................13 Историческая справка....................................................................................................................................14 Сравнение языков С++ и С.............................................................................................................................15 Эффективность и структура .......................................................................................................................16 Философские замечания .................................................................................................................................17 Замечания о программировании на языке С++ .............................................................................................18 Несколько полезных советов..........................................................................................................................19 Замечание для программистов на С ..............................................................................................................19 Список литературы .......................................................................................................................................20 ГЛАВА 1. КРАТКИЙ ОБЗОР С++ .....................................................................................................................22 1.1 ВВЕДЕНИЕ ...............................................................................................................................................22 1.2 Парадигмы программирования................................................................................................................22 1.2.1 Процедурное программирование.......................................................................................................23 1.2.2 Модульное программирование ..........................................................................................................24 1.2.3 Абстракция данных...........................................................................................................................25 1.2.4 Пределы абстракции данных ............................................................................................................27 1.2.5 Объектно-ориентированное программирование..............................................................................28 1.3 "Улучшенный С".......................................................................................................................................29 1.3.1 Программа и стандартный вывод ...................................................................................................29 1.3.2 Переменные и арифметические операции........................................................................................30 1.3.3 Указатели и массивы ........................................................................................................................31 1.3.4 Условные операторы и циклы...........................................................................................................31 1.3.5 Функции .............................................................................................................................................32 1.3.6 Модули ...............................................................................................................................................33 1.4 Поддержка абстракции данных..............................................................................................................35 1.4.1 Инициализация и удаление.................................................................................................................35 1.4.2 Присваивание и инициализация .........................................................................................................36 1.4.3 Шаблоны типа ..................................................................................................................................37 1.4.4 Обработка особых ситуаций............................................................................................................37 1.4.5 Преобразования типов......................................................................................................................38 1.4.6 Множественные реализации ............................................................................................................39 1.5 Поддержка объектно-ориентированного программирования ................................................................40 1.5.1 Механизм вызова ...............................................................................................................................40 1.5.2 Проверка типа...................................................................................................................................41 1.5.3 Множественное наследование..........................................................................................................42 1.5.4 Инкапсуляция.....................................................................................................................................43 1.6 Пределы совершенства............................................................................................................................44 ГЛАВА 2. ОПИСАНИЯ И КОНСТАНТЫ ...........................................................................................................46 2.1 ОПИСАНИЯ.............................................................................................................................................46 2.1.1 Область видимости ..........................................................................................................................47 2.1.2 Объекты и адреса .............................................................................................................................48 2.1.3 Время жизни объектов .....................................................................................................................48 2.2 ИМЕНА.....................................................................................................................................................49 2.3 ТИПЫ.......................................................................................................................................................49 Бьерн Страуструп. Язык программирования С++ 3 2.3.1 Основные типы .................................................................................................................................50 2.3.2 Неявное преобразование типа ..........................................................................................................51 2.3.3 Производные типы............................................................................................................................52 2.3.4 Тип void..............................................................................................................................................52 2.3.5 Указатели..........................................................................................................................................53 2.3.6 Массивы.............................................................................................................................................53 2.3.7 Указатели и массивы ........................................................................................................................55 2.3.8 Структуры........................................................................................................................................56 2.3.9 Эквивалентность типов ...................................................................................................................58 2.3.10 Ссылки .............................................................................................................................................59 2.4 ЛИТЕРАЛЫ..............................................................................................................................................61 2.4.1 Целые константы .............................................................................................................................61 2.4.2 Константы с плавающей точкой.....................................................................................................62 2.4.3 Символьные константы ...................................................................................................................62 2.4.4 Строки...............................................................................................................................................63 2.4.5 Нуль....................................................................................................................................................63 2.5 Поименованные константы....................................................................................................................64 2.5.1. Перечисления ....................................................................................................................................65 2.6. Экономия памяти ....................................................................................................................................66 2.6.1 Поля ...................................................................................................................................................66 2.6.2. Объединения ......................................................................................................................................67 2.7 Упражнения .............................................................................................................................................68 ГЛАВА 3. ВЫРАЖЕНИЯ И ОПЕРАТОРЫ ........................................................................................................70 3.1 Калькулятор.............................................................................................................................................70 3.1.1 Анализатор.........................................................................................................................................70 3.1.2 Функция ввода ...................................................................................................................................74 3.1.3 Таблица имен.........................................................................................................................................76 3.1.4 Обработка ошибок............................................................................................................................77 3.1.5 Драйвер..............................................................................................................................................78 3.1.6 Параметры командной строки ........................................................................................................79 3.2 Сводка операций ......................................................................................................................................79 3.2.1 Скобки................................................................................................................................................83 3.2.2 Порядок вычислений..........................................................................................................................83 3.2.3 Инкремент и декремент ...................................................................................................................84 3.2.4 Поразрядные логические операции....................................................................................................85 3.2.5 Преобразование типа........................................................................................................................86 3.2.6 Свободная память.............................................................................................................................87 3.3 Сводка операторов...................................................................................................................................90 3.3.1 Выбирающие операторы ..................................................................................................................90 3.3.2 Оператор goto ...................................................................................................................................92 3.4 Комментарии и расположение текста ...................................................................................................93 3.5 Упражнения..............................................................................................................................................94 ГЛАВА 4..............................................................................................................................................................97 4.1 Введение ....................................................................................................................................................97 4.2 Связывание................................................................................................................................................97 4.3 Заголовочные файлы .................................................................................................................................99 4.3.1 Единственный заголовочный файл .................................................................................................. 100 4.3.2 Множественные заголовочные файлы ............................................................................................ 102 4.4 Связывание с программами на других языках........................................................................................ 104 4.5 Как создать библиотеку ........................................................................................................................ 105 4.6 Функции................................................................................................................................................... 106 4.6.1 Описания функций............................................................................................................................ 106 4.6.2 Определения функций....................................................................................................................... 107 4.6.3 Передача параметров...................................................................................................................... 107 4.6.4 Возвращаемое значение.................................................................................................................... 109 Бьерн Страуструп. Язык программирования С++ 4 4.6.5 Параметр-массив............................................................................................................................. 110 4.6.6 Перегрузка имени функции............................................................................................................... 111 4.6.7 Стандартные значения параметров............................................................................................... 113 4.6.8 Неопределенное число параметров.................................................................................................. 114 4.6.9 Указатель на функцию..................................................................................................................... 115 4.7 Макросредства ....................................................................................................................................... 118 4.8 Упражнения............................................................................................................................................ 120 5. КЛАССЫ....................................................................................................................................................... 122 5.1 Введение и краткий обзор....................................................................................................................... 122 5.2 Классы и члены........................................................................................................................................ 123 5.2.1 Функции-члены ..................................................................................................................................... 123 5.2.2 Классы .............................................................................................................................................. 123 5.2.3 Ссылка на себя.................................................................................................................................. 124 5.2.4 Инициализация.................................................................................................................................. 127 5.2.5 Удаление ........................................................................................................................................... 128 5.2.6 Подстановка .................................................................................................................................... 129 5.3 Интерфейсы и реализации...................................................................................................................... 129 5.3.1 Альтернативные реализации ........................................................................................................... 130 5.3.2 Законченный пример класса ............................................................................................................. 132 5.4 Еще о классах.......................................................................................................................................... 135 5.4.1 Друзья ............................................................................................................................................... 135 5.4.2 Уточнение имени члена.................................................................................................................... 136 5.4.3 Вложенные классы ........................................................................................................................... 137 5.4.4 Статические члены ......................................................................................................................... 138 5.4.5 Указатели на члены.......................................................................................................................... 139 5.4.6 Структуры и объединения............................................................................................................... 139 5.5 Конструкторы и деструкторы ............................................................................................................. 142 5.5.1 Локальные переменные .................................................................................................................... 142 5.5.2 Статическая память....................................................................................................................... 143 5.5.3 Свободная память............................................................................................................................ 144 5.5.4 Объекты класса как члены............................................................................................................... 144 5.5.5 Массивы объектов класса................................................................................................................ 146 5.5.6 Небольшие объекты......................................................................................................................... 146 5.6 Упражнения............................................................................................................................................ 147 ГЛАВА 6............................................................................................................................................................ 149 6.1 Введение и краткий обзор....................................................................................................................... 149 6.2 Производные классы ............................................................................................................................... 149 6.2.1 Функции-члены ................................................................................................................................. 151 6.2.2 Конструкторы и деструкторы....................................................................................................... 152 6.2.3 Иерархия классов.............................................................................................................................. 153 6.2.4 Поля типа......................................................................................................................................... 153 6.2.5 Виртуальные функции...................................................................................................................... 155 6.3 Абстрактные классы.............................................................................................................................. 156 6.4 Пример законченной программы ............................................................................................................ 158 6.4.1 Монитор экрана............................................................................................................................... 158 6.4.2 Библиотека фигур ............................................................................................................................ 160 6.4.3 Прикладная программа .................................................................................................................... 162 6.5 Множественное наследование ............................................................................................................... 164 6.5.1 Множественное вхождение базового класса.................................................................................. 165 6.5.2 Разрешение неоднозначности.......................................................................................................... 165 6.5.3 Виртуальные базовые классы .......................................................................................................... 167 6.6 Контроль доступа.................................................................................................................................. 171 6.6.1 Защищенные члены........................................................................................................................... 171 6.6.2 Доступ к базовым классам............................................................................................................... 173 6.7 Свободная память .................................................................................................................................. 174 Бьерн Страуструп. Язык программирования С++ 5 6.7.1 Виртуальные конструкторы ........................................................................................................... 175 6.7.2 Указание размещения....................................................................................................................... 178 6.8 Упражнения............................................................................................................................................ 179 ГЛАВА 7............................................................................................................................................................ 181 7.1 Введение .................................................................................................................................................. 181 7.2 Операторные функции ........................................................................................................................... 181 7.2.1 Бинарные и унарные операции ......................................................................................................... 182 7.2.2 Предопределенные свойства операций............................................................................................ 183 7.2.3 Операторные функции и пользовательские типы .......................................................................... 183 7.3 Пользовательские операции преобразования типа ............................................................................... 184 7.3.1 Конструкторы ................................................................................................................................. 184 7.3.2 Операции преобразования ................................................................................................................ 186 7.3.3 Неоднозначности ............................................................................................................................. 187 7.4 Литералы................................................................................................................................................ 189 7.5 Большие объекты ................................................................................................................................... 189 7.6 Присваивание и инициализация............................................................................................................... 190 7.7 Индексация.............................................................................................................................................. 192 7.8 Вызов функции ........................................................................................................................................ 194 7.9 Косвенное обращение.............................................................................................................................. 195 7.10 Инкремент и декремент....................................................................................................................... 196 7.11 Строковый класс................................................................................................................................... 198 7.12 Друзья и члены....................................................................................................................................... 200 7.13 Предостережения ................................................................................................................................ 201 7.14 Упражнения .......................................................................................................................................... 201 ГЛАВА 8. ШАБЛОНЫ ТИПА .......................................................................................................................... 204 8.1 Введение .................................................................................................................................................. 204 8.2 Простой шаблон типа............................................................................................................................ 204 8.3 Шаблоны типа для списка...................................................................................................................... 206 8.3.1 Список с принудительной связью..................................................................................................... 207 8.3.2 Список без принудительной связи.................................................................................................... 209 8.3.3 Реализация списка ............................................................................................................................ 212 8.3.4 Итерация.......................................................................................................................................... 213 8.4 Шаблоны типа для функций................................................................................................................... 215 8.4.1 Простой шаблон типа для глобальной функции ............................................................................. 216 8.4.2 Производные классы позволяют ввести новые операции ............................................................... 217 8.4.3 Передача операций как параметров функций ................................................................................. 218 8.4.4 Неявная передача операций ............................................................................................................. 219 8.4.5 Введение операций с помощью параметров шаблонного класса .................................................... 219 8.5 Разрешение перегрузки для шаблонной функции.................................................................................... 221 8.6 Параметры шаблона типа..................................................................................................................... 222 8.7 Шаблоны типа и производные классы ................................................................................................... 224 8.7.1 Задание реализации с помощью параметров шаблона.................................................................... 225 8.8 Ассоциативный массив........................................................................................................................... 225 8.9 Упражнения............................................................................................................................................ 231 ГЛАВА 9............................................................................................................................................................ 232 9.1 Обработка ошибок ................................................................................................................................. 232 9.1.1 Особые ситуации и традиционная обработка ошибок .................................................................. 234 9.1.2 Другие точки зрения на особые ситуации....................................................................................... 235 9.2 Различение особых ситуаций.................................................................................................................. 235 9.3 Имена особых ситуаций ......................................................................................................................... 237 9.3.1 Группирование особых ситуаций..................................................................................................... 238 9.3.2 Производные особые ситуации........................................................................................................ 240 9.4 Запросы ресурсов .................................................................................................................................... 243 9.4.1 Конструкторы и деструкторы....................................................................................................... 244 9.4.2 Предостережения............................................................................................................................ 246 Бьерн Страуструп. Язык программирования С++ 6 9.4.3 Исчерпание ресурса.......................................................................................................................... 246 9.4.4 Особые ситуации и конструкторы ................................................................................................. 248 9.5 Особые ситуации могут не быть ошибками......................................................................................... 249 9.6 Задание интерфейса............................................................................................................................... 251 9.6.1 Неожиданные особые ситуации...................................................................................................... 252 9.7 Неперехваченные особые ситуации........................................................................................................ 253 9.8 Другие способы обработки ошибок ....................................................................................................... 254 9.9 Упражнения............................................................................................................................................ 256 ГЛАВА 10. ПОТОКИ......................................................................................................................................... 257 10.1 ВВЕДЕНИЕ........................................................................................................................................... 257 10.2 ВЫВОД.................................................................................................................................................. 258 10.2.1 Вывод встроенных типов............................................................................................................... 259 10.2.2 Вывод пользовательских типов ..................................................................................................... 260 10.3 ВВОД ..................................................................................................................................................... 261 10.3.1 Ввод встроенных типов ................................................................................................................. 261 10.3.2 Состояния потока ......................................................................................................................... 263 10.3.3 Ввод пользовательских типов........................................................................................................ 265 10.4 Форматирование .................................................................................................................................. 266 10.4.1 Класс ios.......................................................................................................................................... 266 10.4.1.1 Связывание потоков ................................................................................................................ 266 10.4.1.2 Поля вывода ............................................................................................................................. 267 10.4.1.3 Состояние формата ............................................................................................................... 268 10.4.1.4 Вывод целых............................................................................................................................. 269 10.4.1.5 Выравнивание полей................................................................................................................. 270 10.4.1.6 Вывод плавающих чисел........................................................................................................... 270 10.4.2 Манипуляторы................................................................................................................................ 271 10.4.2.1 Стандартные манипуляторы ввода-вывода .......................................................................... 273 10.4.3 Члены ostream................................................................................................................................. 274 10.4.4 Члены istream.................................................................................................................................. 275 10.5 Файлы и потоки .................................................................................................................................... 275 10.5.1 Закрытие потоков ......................................................................................................................... 276 10.5.2 Строковые потоки......................................................................................................................... 277 10.5.3 Буферизация ................................................................................................................................... 278 10.6 Ввод-вывод в С ...................................................................................................................................... 279 10.7 Упражнения .......................................................................................................................................... 281 ГЛАВА 11. ПРОЕКТИРОВАНИЕ И РАЗВИТИЕ............................................................................................. 283 11.1 Введение ................................................................................................................................................ 283 11.2 Цели и средства .................................................................................................................................... 285 11.3 Процесс развития ................................................................................................................................. 287 11.3.1 Цикл развития ................................................................................................................................ 289 11.3.2 Цели проектирования..................................................................................................................... 290 11.3.3 Шаги проектирования.................................................................................................................... 291 11.3.3.1 Шаг 1: определение классов .................................................................................................... 292 11.3.3.2 Шаг 2: определение набора операций ..................................................................................... 293 11.3.3.3 Шаг 3: указание зависимостей ............................................................................................... 294 11.3.3.4 Шаг 4: определение интерфейсов ........................................................................................... 294 11.3.3.5 Перестройка иерархии классов ............................................................................................... 295 11.3.3.6 Использование моделей............................................................................................................ 295 11.3.4 Эксперимент и анализ.................................................................................................................... 296 11.3.5 Тестирование.................................................................................................................................. 298 11.3.6 Сопровождение .............................................................................................................................. 298 11.3.7 Эффективность............................................................................................................................. 299 11.4 Управление проектом ........................................................................................................................... 299 11.4.1 Повторное использование .............................................................................................................. 299 11.4.2 Размер............................................................................................................................................. 301 Бьерн Страуструп. Язык программирования С++ 7 11.4.3 Человеческий фактор..................................................................................................................... 302 11.5 Свод правил ........................................................................................................................................... 303 11.6 Список литературы с комментариями................................................................................................ 304 ГЛАВА 12. ПРОЕКТИРОВАНИЕ И С++......................................................................................................... 306 12.1 Проектирование и язык программирования......................................................................................... 306 12.1.1 Игнорирование классов................................................................................................................... 307 12.1.2 Игнорирование наследования ......................................................................................................... 309 12.1.3 Игнорирование статического контроля типов ............................................................................ 309 12.1.4 Гибридный проект.......................................................................................................................... 312 12.2 Классы................................................................................................................................................... 314 12.2.1 Что представляют классы?.......................................................................................................... 315 12.2.2 Иерархии классов............................................................................................................................ 316 12.2.3 Зависимости в рамках иерархии классов....................................................................................... 318 12.2.4 Отношения принадлежности........................................................................................................ 319 12.2.5 Принадлежность и наследование .................................................................................................. 321 12.2.6 Отношения использования............................................................................................................. 324 12.2.7 Отношения внутри класса............................................................................................................. 325 12.2.7.1 Инварианты............................................................................................................................. 326 12.2.7.2 Инкапсуляция ........................................................................................................................... 328 12.2.8 Программируемые отношения....................................................................................................... 328 12.3 Компоненты.......................................................................................................................................... 330 12.4 Интерфейсы и реализации.................................................................................................................... 332 12.5 Свод правил ........................................................................................................................................... 334 ГЛАВА 13. ПРОЕКТИРОВАНИЕ БИБЛИОТЕК.............................................................................................. 335 13.1 Введение ................................................................................................................................................ 335 13.2 Конкретные типы ................................................................................................................................ 336 13.3 Абстрактные типы.............................................................................................................................. 338 13.4 Узловые классы ..................................................................................................................................... 342 13.5 Динамическая информация о типе....................................................................................................... 344 13.5.1 Информация о типе ....................................................................................................................... 346 13.5.2 Класс Type_info............................................................................................................................... 347 13.5.3 Как создать систему динамических запросов о типе................................................................... 349 13.5.4 Расширенная динамическая информация о типе .......................................................................... 350 13.5.5 Правильное и неправильное использование динамической информации о типе...................... 350 13.6 Обширный интерфейс .......................................................................................................................... 351 13.7 Каркас области приложения................................................................................................................ 354 13.8 Интерфейсные классы.......................................................................................................................... 355 13.9 Управляющие классы ............................................................................................................................ 358 13.10 Управление памятью .......................................................................................................................... 361 13.10.1 Сборщик мусора ........................................................................................................................... 362 13.10.2 Контейнеры и удаление................................................................................................................ 363 13.10.3 Функции размещения и освобождения......................................................................................... 366 13.11 Упражнения ........................................................................................................................................ 368 Бьерн Страуструп. Язык программирования С++ 8 |