Глава 8
Потоки 212
8.1 Введение 212
8.2 Вывод 213
8.2.1 Вывод Встроенных Типов 213
8.2.2 Вывод Типов, Определяемых Пользователем 214
8.2.3 Некоторые Подробности Разработки 214
8.2.4 Форматированный Вывод 216
8.2.5 Виртуальная Функция Вывода 218
8.3 Файлы и Потоки 219
8.3.1 Инициализация Потоков Вывода 219
8.3.2 Закрытие Потоков Вывода 220
8.3.3 Открытие Файлов 220
8.3.4 Копирование Потоков 221
8.4 Ввод 221
8.4.1 Ввод Встроенных Типов 221
8.4.2 Состояния Потока 223
8.4.3 Ввод Типов, Определяемых Пользователем 224
8.4.4 Инициализация Потоков Ввода 225
8.5 Работа со Строками 226
8.6 Буферизация 226
8.7 Эффективность 228
8.8 Упражнения 228
1. ВВЕДЕНИЕ 230
2. ДОГОВОРЕННОСТИ О ЛЕКСИКЕ 230
2.1 Комментарии 230
2.2 Идентификаторы (имена) 230
2.3 Ключевые слова 230
2.4 Константы 231
2.4.1 Целые константы 231
2.4.2 Явно заданные длинные константы 231
2.4.3 Символьные константы 231
2.4.4 Константы с плавающей точкой 232
2.4.5 Перечислимые константы 232
2.4.6 Описанные константы 232
2.5 Строки 232
2.6 Харктеристики аппаратного обеспечения 232
3. ЗАПИСЬ СИНТАКСИСА 233
4. ИМЕНА И ТИПЫ 233
4.1 Область видимости 234
4.2 Определения 234
4.3 Компоновка 234
4.4 Классы памяти 235
4.5 Основные типы 236
4.4 Производные типы 236
5. ОБЪЕКТЫ И LVALUE(АДРЕСА) 237
6. ПРЕОБРАЗОВАНИЯ 237
6.1 Символы и целые 237
6.2 Float и double 237
6.3 Плавающие и целые 237
6.4 Указатели и целые 238
6.5 Unsigned 238
6.6 Арифметические преобразования 238
6.7 Преобразования указателей 239
6.8 Преобразования ссылок 239
7. ВЫРАЖЕНИЯ 239
7.1 Основные выражения 240
7.2 Унарные операции 241
7.2.1 Увеличение и Уменьшение 242
7.2.2 Sizeof 242
7.2.3 Явное Преобразование Типа 243
7.2.4 Свободная Память 243
7.3 Мультипликативные операции 244
7.4 Аддитивные операции 244
7.5 Операции сдвига 245
7.6 Операции отношения 245
7.7 Операции равенства 246
7.8 Операция побитовое И 246
7.9 Операция побитовое исключающее ИЛИ 246
7.10 Операция побитовое включающее ИЛИ 246
7.11 Операция логическое И 246
7.12 Операция логическое ИЛИ 246
7.13 Условная операция 247
7.14 Операции присваивания 247
7.15 Операция запятая 247
7.16 Перегруженные операции 248
7.16.1 Унарные операции 248
7.16.2 Бинарные операции 248
7.16.3 Особые операции 248
8. ОПИСАНИЯ 249
8.1 Спецификаторы класса памяти 249
8.2 Спецификаторы Типа 250
8.3 Описатели 251
8.4 Смысл описателей 252
8.4.1 Примеры 254
8.5 Описания классов 256
8.5.1 Статические члены 257
8.5.2 Функции члены 257
8.5.3 Производные классы 259
8.5.4 Виртуальные функции 259
8.5.5 Конструкторы 260
8.5.6 Преобразования 261
8.5.7 Деструкторы 261
8.5.8 Видимость имен членов 261
8.5.9 Друзья (friends) 262
8.5.10 Функция операция 263
8.5.11 Структуры 263
8.5.12 Объединения 263
8.5.13 Поля бит 263
8.5.14 Вложенные классы 264
8.6 Инициализация 264
8.6.1 Список инициализаторов 265
8.6.2 Классовые объекты 266
8.6.3 Ссылки 266
8.6.4 Массивы символов 267
8.7 Имена типов 267
8.8 Определение типа typedef 268
8.9 Перегруженные имена функций 269
8.10 Описание перечисления 270
8.11 Описание Asm 270
9. ОПЕРАТОРЫ 271
9.1 Оператор выражение 271
9.2 Составной оператор, или блок 271
9.3 Условный оператор 271
9.4 Оператор while 271
9.5 Оператор do 272
9.6 Оператор for 272
9.7 Оператор switch 273
9.8 Оператор break 273
9.9 Оператор continue 274
9.10 Оператор return 274
9.11 Оператор goto 274
9.12 Помеченные операторы 274
9.13 Пустой оператор 274
9.14 Оператор delete 275
9.15 Оператор asm 275
10. ВНЕШНИЕ ОПРЕДЕЛЕНИЯ 275
10.1 Определения функций 275
10.2 Определения внешних данных 276
11. ПРАВИЛА ОБЛАСТИ ВИДИМОСТИ 276
12. КОМАНДНЫЕ СТРОКИ КОМПИЛЯТОРА 276
12.1 Замена идентификаторов 277
12.2 Включение файлов 277
12.3 Условная компиляция 277
12.4 Управление строкой 278
13. НЕЯВНЫЕ ОПИСАНИЯ 278
14. ОБЗОР ТИПОВ 278
14.1 Классы 278
14.2 Функции 278
14.3 Массивы, указатели и индексирование 279
14.4 Явные преобразования указателей 279
15. КОНСТАНТНЫЕ ВЫРАЖЕНИЯ 280
16. СООБРАЖЕНИЯ МОБИЛЬНОСТИ 281
17. СВОБОДНАЯ ПАМЯТЬ 281
18. КРАТКОЕ ИЗЛОЖЕНИЕ СИНТАКСИСА 282
18.1 Выражения 282
18.2 Описания 283
18.3 Операторы 285
18.4 Внешние определения 286
18.5 Препроцессор 286
19. ОТЛИЧИЯ ОТ "СТАРОГО C" 286
19.1 Расширения 286
Предисловие
Язык формирует наш способ мышления
и определяет, о чем мы можем мыслить.
Б.Л. Ворф
C++ - универсальный язык программирования, задуманный так, чтобы
сделать программирование более приятным для серьезного
программиста. За исключением второстепенных деталей C++ является
надмножеством языка программирования C. Помимо возможностей,
которые дает C, C++ предоставляет гибкие и эффективные средства
определения новых типов. Используя определения новых типов, точно
отвечающих концепциям приложения, программист может разделять
разрабатываемую программу на легко поддающиеся контролю части.
Такой метод построения программ часто называют абстракцией данных.
Информация о типах содержится в некоторых объектах типов,
определенных пользователем. Такие объекты просты и надежны в
использовании в тех ситуациях, когда их тип нельзя установить на
стадии компиляции. Программирование с применением таких объектов
часто называют объектно-ориентированным. При правильном
использовании этот метод дает более короткие, проще понимаемые и
легче контролируемые программы.
Ключевым понятием C++ является класс. Класс - это тип,
определяемый пользователем. Классы обеспечивают скрытие данных,
гарантированную инициализацию данных, неявное преобразование типов
для типов, определенных пользователем, динамическое задание типа,
контролируемое пользователем управление памятью и механизмы
перегрузки операций. C++ предоставляет гораздо лучшие, чем в C,
средства выражнения модульности программы и проверки типов. В языке
есть также усовершенствования, не связанные непосредственно с
классами, включающие в себя символические константы, inline-
подстановку функций, параметры функции по умолчанию, перегруженные
имена функций, операции управления свободной памятью и ссылочный
тип. В C++ сохранены возможности языка C по работе с основными
объектами аппаратного обеспечения (биты, байты, слова, адреса и
т.п.). Это позволяет весьма эффективно реализовывать типы,
определяемые пользователем.
C++ и его стандартные библиотеки спроектированы так, чтобы
обеспечивать переносимость. Имеющаяся на текущий момент реализация
языка будет идти в большинстве систем, поддерживающих C. Из C++
программ можно использовать C библиотеки, и с C++ можно