
- •Глава 2. Модульное программирование 72
- •Глава 3. Технология создания программ 102
- •Часть II. Объектно-ориентированное программирование 173
- •Глава 4. Классы 178
- •Глава 13. Итераторы и функциональные объекты 328
- •Глава 14. Алгоритмы 343
- •Глава 15. Средства для численных расчетов 369
- •Глава 16. Другие средства стандартной библиотеки 378
- •Часть 1
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •If ( выражение ) оператор_1; [else оператор_2;]
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •If (f) cout « "ХпРезультат return 0;
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Int* p (&а); // то же самое другим способом
- •Часть I. Структурное программирование
- •5 4 2 1 3 // Порядок интерпретации описания
- •56 Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Int b[nstr][nstb]; // описание массива
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Глава 2
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Int sum(int a. Int b); // объявление функции
- •Глава 2. Модульное программирование
- •Void print_worker(Worker); //объявление функции
- •Часть I. Структурное программирование
- •Int fl(){return 1;} //правильно
- •Void f2(){return 1;} // неправильно. F2 не должна возвращать значение
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •92 Часть I. Структурное программирование
- •Глава 2. Модульное программирование 93
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Void fund (double); // Перегрузка
- •Void func2(int); // Верно (повторное объявление)
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Глава 3
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ 107
- •II Комментарий, описывающий,
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •If(!remove (&pbeg. &pend. 5))cout « "не найден";
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Int f; //.Частота регенерации
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •168 Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть II
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Глава 4
- •Глава 4. Классы
- •180 Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Int a::count: // Определение в глобальной области
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Глава 5
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 6
- •Часть II. Объектно-ориентированное программирование
- •Void add(int d): // Добавление узла в конец списка
- •Глава 6. Шаблоны классов
- •Часть II. Объектно-ориентированное программирование
- •Глава 6. Шаблоны классов
- •Часть II. Объектно-ориентированное программирование
- •Глава 6. Шаблоны классов
- •Часть II. Объектно-ориентированное программирование
- •Глава 6. Шаблоны классов
- •Часть II. Объектно-ориентированное программирование
- •Глава 6. Шаблоны классов
- •Глава 7
- •Глава 7. Обработка исключительных ситуаций
- •Часть II. Объектно-ориентированное программирование
- •Глава 7. Обработка исключительных ситуаций
- •Часть II. Объектно-ориентированное программирование
- •Глава 7. Обработка исключительных ситуаций
- •Часть II. Объектно-ориентированное программирование
- •Глава 7. Обработка исключительных ситуаций
- •230 Часть II. Объектно-ориентированное программирование
- •Глава 8
- •Часть II. Объектно-ориентированное программирование
- •Глава 8. Преобразования типов
- •Часть II. Объектно-ориентированное программирование
- •Глава 8. Преобразование типов
- •Часть II. Объектно-ориентированное программирование
- •Глава 8. Преобразования типов
- •Часть II. Объектно-ориентированное программирование
- •Глава 8. Преобразования типов
- •Часть II. Объектно-ориентированное программирование
- •Глава 9
- •Часть II. Объектно-ориентированное программирование
- •Глава 9. Рекомендации по программированию
- •Часть II. Объектно-ориентированное программирование
- •Глава 9. Рекомендации по программированию
- •Часть II. Объектно-ориентированное программирование
- •Глава 9. Рекомендации по программированию
- •250 Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •254 Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть III
- •Часть III. Стандартная библиотека
- •Глава 10 Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Глава 11
- •Глава 11. Строки
- •Часть III. Стандартная библиотека
- •Глава 11. Строки
- •Часть III. Стандартная библиотека
- •Глава 11. Строки
- •Часть III. Стандартная библиотека
- •Глава 11. Строки
- •Часть III. Стандартная библиотека
- •Глава 12
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы 317
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Глава 13
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 14
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы 361
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 15
- •Часть III. Стандартная библиотека
- •Глава 15. Средства для численных расчетов
- •Часть III. Стандартная библиотека
- •Глава 15. Средства для численных расчетов
- •Часть III. Стандартная библиотека
- •Глава 15. Средства для численных расчетов
- •Часть III. Стандартная библиотека
- •Глава 15. Средства для численных расчетов
- •Глава 16
- •Глава 16. Другие средства стандартной библиотеки
- •Часть III. Стандартная библиотека
- •396 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •Int level; // флаг состояния буфера
- •Int bsize; // размер внутреннего буфера
- •I0lbf 1 построчная буферизация текстового файла;
- •400 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •402 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •404 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •406 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •446 Приложение 6. Функции стандартной библиотеки
Глава 16. Другие средства стандартной библиотеки
379
Часть III. Стандартная библиотека
length_error — попытка создания объекта, большего, чем максимальный размер типа size_t;
domain_error — нарушение внутренних условий перед выполнением действия;
out_of_range — попытка вызова функции с параметром, не входящим в допустимые значения;
i nva I i d__a rgument — попытка вызова функции с неверным параметром;
Гдпде_еггог — неправильный результат выполнения;
overflow_error — арифметическое переполнение (результат слишком большой для указанного типа данных);
underflow_error — исчезновение порядка (результат слишком маленький для указанного типа данных).
Для использования этих классов необходимо подключить заголовочный файл
<stdexcept>.
Средства локализации включают в себя упорядоченную по категориям информацию, специфичную для разных стран, например, представление даты и времени, формат национальной валюты, представление чисел и символов. Категории представлены классами. Программист может использовать их для обеспечения универсальности программы при ее работе в различных странах. Описания средств локализации находятся в заголовочных файлах <1оса1е> и <clocale>.
Для работы с комплексными числами библиотека предоставляет шаблон класса complex, его специализации для типов float, double и long double, а также многочисленные функции. Все это богатство становится доступным при подключении заголовочного файла <complex>.
Функции библиотеки описаны в приложении 6, константы, макросы и типы — в приложении 5, заголовочные файлы — в приложении 4.
Упражнения к части III
Стандартные потоки
Выполнить задания из раздела «Циклические вычислительные процессы» (см. упражнения к первой части) с использованием стандартных потоков, манипуляторов и форматирующих методов.
Файловые потоки
Выполнить задания из раздела «Функции и файлы» (см. упражнения к первой части) с использованием файловых потоков и методов обработки ошибок.
Потоки и типы, определенные пользователем
Дополнить программы из раздела «Классы» (см. упражнения ко второй части) перегруженными операциями ввода/вывода в поток для созданных классов.
Строки
Выполнить задания из раздела «Функции библиотеки для работы со строками и символами» (см. упражнения к первой части) с использованием класса string.
Контейнерные классы
Выполнить задания из разделов «Одномерные и двумерные массивы», «Структуры» и «Динамические структуры данных» (см. упражнения к первой части) с использованием соответствующих контейнерных классов библиотеки.
Алгоритмы
Выполнить задания из раздела «Одномерные массивы» (см. упражнения к первой части) с использованием контейнерных классов и алгоритмов библиотеки.
Класс valarray
Выполнить задания из разделов «Одномерные массивы» и «Двумерные массивы» (см. упражнения к первой части) с использованием класса valarray и срезов.
Послесловие
В этой книге большое внимание уделялось описанию основ языка C++, Владение ими является базой, необходимой для написания программ. Но создать эффективную, легко читаемую и расширяемую программу невозможно без знания механизмов реализации возможностей языка и способов их взаимодействия. Кроме того, как утверждает Скотт Майерс, «работа на C++ при правильном его использовании способна доставить удовольствие». Неполное же понимание функционирования языка, напротив, приводит к созданию программ, полных ошибок и не поддающихся сопровождению.
Поведение языка определяют цели, поставленные при его разработке. Для C++ .основными целями являлись эффективность, применимость для широкого спектра реальных задач, а также совместимость с языком С, традиционными инструментами и окружением.
История создания языка и причины включения в него тех возможностей, которыми он обладает в настоящий момент, подробно описаны в книге Б. Страуструпа «Дизайн и эволюция языка C++» [18]. Изучение этой книги поможет понять, отчего средства языка реализованы именно так, а не иначе. Полезные практические советы по грамотному написанию эффективных программ содержатся в книгах [17], [13] и [9]. Для получения полной справочной информации о языке и стандартной библиотеке лучше всего пользоваться стандартом ISO/IEC 14882:1998 (его предварительные варианты, мало отличающиеся от окончательного, можно найти в Интернете).
Желаю всем читателям дальнейших успехов в освоении и использовании C++!
Литература
Аммерааль Л. STL для программистов на C++. — М.: ДМК, 2000. — 240 с.
Бабэ Б. Просто и ясно о Borland C++. - М.: БИНОМ, 1995. - 400 с.
Бадд Т. Объектно-ориентированное программирование в действии. — СПб.: Питер, 1997. - 464 с.
Баженова И. Ю. Visual C++ 6.0. Уроки программирования. — М.: Диалог-МИФИ, 1999.-416 с.
Дэвис С. C++ для «чайников». — К.: Диалектика, 1996. — 304 с.
Брукс Ф. Мифический человеко-месяц, или как создаются программные комплексы. — М.: «Символ-Плюс», 2000. — 304 с.
Буч Г. Объектно-ориентированный анализ и проектирование с примерами на C++.- М.: БИНОМ, 1998. - 560 с.
Вирт Н. Алгоритмы + структуры данных = программы. — М.: Мир, 1985. — 406 с.
Голуб А. Я. С и C++. Правила программирования. — М.: БИНОМ, 1996. — 272 с.
Карпов Б., Баранова Т. C++: специальный справочник. — СПб.: Питер, 2000. - 480 с.
Ласло М. Вычислительная геометрия и компьютерная графика на C++. — М.: БИНОМ, 1997. - 304 с.
Луис Д. С и C++. Справочник. — М.: Восточная книжная компания, 1997. — 592 с.
Мейерс С Эффективное использование C++. — М.: ДМК, 2000. — 240 с.
Подбельский В. В. Язык Си++: Учебное пособие. — М.: Финансы и статистика, 1996. - 560 с.
Пол И. Объектно-ориентированное программирование с использованием C++. - К.: ДиаСофт, 1995. - 480 с.
Романовская Л. М. и др. Программирование в среде Си для ПЭВМ ЕС. — М.: Финансы и статистика, 1992. — 352 с.
Страуструп Б. Язык программирования C++. — СПб.: БИНОМ, 1999. — 991 с.
Страуструп Б. Дизайн и эволюция языка C++. — М.: ДМК, 2000. — 448 с.
Шилдт Г. Теория и практика C++. - СПб.: BHV, 1996. - 416 с.
Неформальное введение в C++ и Turbo Vision. — Галерея «Петроиоль», 1992. — 381 с.
ПРИЛОЖЕНИЕ 1 Операции языка C++
Операции приведены в порядке убывания приоритета. Операции с разными приоритетами разделены чертой.
Операция |
Краткое описание |
Унарные операции |
|
|
доступ к области видимости |
|
выбор |
-> |
выбор |
[ ] |
индексация |
( ) |
вызов функции |
<тип>( ) |
конструирование |
++ |
постфиксный инкремент |
-- |
постфиксный декремент |
typeid |
идентификация типа |
dynamic_cast |
преобразование типа с проверкой на этапе выполнения |
static_cast |
преобразование типа с проверкой на этапе компиляции |
reinterpret_cast |
преобразование типа без проверки |
const_cast |
константное преобразование типа |
sizeof |
размер объекта или типа |
-- |
префиксный декремент |
++ |
префиксный инкремент |
- |
поразрядное отрицание |
i |
логическое отрицание |
Приложение 1. Операции языка C++ 385
Операция |
Краткое описание |
- |
арифметическое отрицание (унарный минус) |
+ |
унарный плюс |
& |
взятие адреса I |
* |
разадресация |
new |
выделение памяти |
delete |
освобождение памяти |
(<тип>) |
преобразование типа |
.* |
выбор |
->* |
выбор |
Бинарные и |
тернарные операции |
* |
умножение |
/ |
деление |
I % |
остаток от деления |
+ |
сложение |
| - |
вычитание |
« |
сдвиг влево |
» |
сдвиг вправо |
< |
меньше |
<= |
меньше или равно |
> |
больше |
>= |
больше или равно |
== |
равно |
!= |
не равно |
I & |
поразрядная конъюнкция (И) |
А |
поразрядное исключающее ИЛИ |
| поразрядная дизъюнкция (ИЛИ) |
|
&& |
логическое И |
11 логическое ИЛИ |
|
? : |
условная операция (тернарная) |
- |
присваивание |
•= |
умножение с присваиванием |
/- |
деление с присваиванием |
386
Приложение 1. Операции языка C++
Операция |
Краткое описание |
X- |
остаток отделения с присваиванием |
+» |
сложение с присваиванием |
-- |
вычитание с присваиванием |
«» |
сдвиг влево с присваиванием |
»« |
сдвиг вправо с присваиванием |
&- |
поразрядное И с присваиванием |
I- |
поразрядное ИЛИ с присваиванием |
А- |
поразрядное исключающее ИЛИ с присваиванием |
throw |
исключение |
последовательное вычисление
ПРИЛОЖЕНИЕ 2
Спецификации формата для функций семейства printf
Спецификация |
Пояснение |
1 с |
аргумент рассматривается как отдельный символ , |
d.1 |
аргумент преобразуется к десятичному виду |
I е'Е |
аргумент, рассматриваемый как переменная типа float или double, преобразуется в десятичную форму в виде [-]m.nnnnnneO-]xx, где длина строки из п определяется указанной точностью. Точность по умолчанию равна 6 |
I f |
аргумент, рассматриваемый как переменная типа float или double, преобразуется в десятичную форму в виде [-]mmm.nnnnn, где длина строки из л определяется указанной точностью. Точность по умолчанию равна 6 |
g,G |
используется формат %е или %f, который короче; незначащие нули не печатаются |
0 |
аргумент преобразуется в беззнаковую восьмеричную форму (без лидирующего нуля) |
Р |
вывод указателя в шестнадцатеричном формате (эта спецификация не входит в стандарт, но она существует практически во всех реализациях) |
S |
аргумент является строкой: символы строки печатаются до тех пор, пока не будет достигнут нулевой символ или не будет напечатано количество символов, указанное в спецификации точности |
U |
аргумент преобразуется в беззнаковую десятичную форму |
х, X |
аргумент преобразуется в беззнаковую шестнадцатеричную форму (без лидирующих Ох) |
% |
выводится символ % |
388
Приложение 2. Спецификации формата для функций семейства printf
Модификаторы формата
Модификаторы формата применяются для управления шириной поля, отводимого дЛ5г размещения значения. Модификаторы — это одно или два числа, первое из которых задает минимальное количество позиций, отводимых под число, а второе — сколько из этих позиций отводится под дробную часть числа (точность). Если указанного количества позиций для размещения значения недостаточно, автоматически выделяется большее количество позиций:
*-minC или JminC;
*-min.precisionC или Jmin.precisionC.
Здесь С — спецификация формата из приведенной выше таблицы, min — число, задающее минимальную ширину поля. Смысл модификатора precision, также задаваемого десятичным числом, зависит от спецификации формата, с которой он используется:
при выводе строки (спецификация Xs) precision указывает максимальное число символов для вывода;
при выводе вещественного числа (спецификации *f или *е) precision указывает количество цифр после десятичной точки;
при выводе целого числа (спецификации И или *i), precision указывает минимальное количество выводимых цифр. Если число представляется меньшим числом цифр, чем указано в precision, выводятся ведущие (начальные) нули.
при выводе вещественного числа (спецификации *d или *G) precision указывает максимальное количество значащих цифр, которые будут выводится.
Символ минус (-) указывает на то, что значение выравнивается по левому краю и, если нужно, дополняется пробелами справа. При отсутствии минуса значение выравнивается по правому краю и дополняется пробелами слева.
Перед спецификацией могут использоваться префиксы 1 и h, например, *1 f, *hu.
Префикс h с типами d, i, о, х и X указывает на то, что тип аргумента short int, а с типом u — short unsigned int.
Префикс 1 с типами d, i, о, х и X указывает на то, что тип аргумента long int, с типом и - long unsigned int, а с типами е, Е, f, g и G — что тип аргумента double, а не float.
Пример:
#include <stdio.h> int main(){
int intl = 45. int2 - 13;
float f - 3.621;
double dbl = 2.23;
char ch = *z\ *str = "ramambahari";
printf("intl = Xd| int2 - X3d| int2 = *-4d|\n". intl. int2. int2);
printfC'intl = XX| int2 = X3x| int2 = X4o|\n". intl. int2. int2);
pr1ntf("f - Xf| f - X4.2f| f = X6.1f|\n". f. f. f);
printfC'f = Xg| f - Xe| f - X+E|\n". f. f. f);
Приложение 2. Спецификации формата для функций семейства printf
389
printfC'dbl - X5.21f| dbl - Ze| dbl - X4.1G|\n". dbl, dbl. dbl); printf("ch - %c\ ch - X3c|\n\ ch. ch);
printfC'str - *14s|\nstr = X-14s|\nstr = Xs|\n\ str, str, str); return 0; } Результат работы программы:
intl = 451 int2 = 131 int2 - 13 |
intl - 2D I int2 - d| int2 = 15 |
f - 3.6210001 f - 3.62 | f = 3.6 |
f - 3.621 I f - 3.621000e+000 | f - +3.62'1000E+000|
dbl = 2.23 | dbl - 2.230000e+000 | dbl - 2 |
ch - z| ch'- z |
str - ramambahari|
str - ramambahari |
str * ramambahari |
ПРИЛОЖЕНИЕ 3
Арифметические преобразования типов
Преобразования типов выполняются, если операнды, входящие в выражения, имеют различные типы. Ниже приведена последовательность преобразований.
□ Любые операнды типа char, unsigned char или short преобразуются к типу int по правилам:
char расширяется нулем или знаком в зависимости от умолчания для char;
unsigned char расширяется нулем;
signed char расширяется знаком;
short, unsigned short и enum при преобразовании не изменяются.
Затем любые два операнда становятся либо int, либо float, double или long double.
□ Если один из операндов имеет тип long double, то другой преобразуется к типу
long double.
□ Если один из операндов имеет тип double, то другой преобразуется к типу
double.
□ Если один из операндов имеет тип float, то другой преобразуется к типу
float.
Иначе, если один из операндов имеет тип unsigned long, то другой преобразуется к типу unsigned long.
Иначе, если один из операндов имеет тип long, то другой преобразуется к типу
long.
Иначе, если один из операндов имеет тип unsigned, то другой преобразуется к типу unsigned.
Иначе оба операнда должны иметь тип int.
Тип результата тот же, что и тип участвующих в выражении операндов.
ПРИЛОЖЕНИЕ 4
Заголовочные файлы стандартной библиотеки
Ввод/вывод
<cstdio> |
Функции ввода/вывода в стиле С |
<cstdlib> |
Функции для работы с символами |
<cwchar> |
Функции ввода/вывода в стиле С для многобайтных символов |
<fstream> |
Файловые потоки |
<iomanip> |
Манипуляторы |
<ios> |
Базовые классы потоков ввода/вывода |
! <iosfwd> |
Предварительные объявления средств ввода/вывода |
<iostream> |
Стандартные объекты и операции с потоками ввода/вывода |
<istream> |
Входные потоки |
<ostream> |
Выходные потоки |
<sstream> |
Строковые потоки |
<streambuf> |
Буферизация потоков |
Строки
<cctype> |
Функции классификации символов |
<cwctype> |
|
<cwtype> |
|
<cstring> |
Функции для работы со строками в стиле С |
<cstd1ib> |
Функции для работы с символами |
<string> |
Строковый класс |
392
Приложение 4. Заголовочные файлы стандартной библиотеки
Контейнерные классы
| <bitset> |
Битовое множество |
<deque> |
Двусторонняя очередь |
<list> |
Двусвязный список |
<map> |
Словарь, словарь с дубликатами |
<queue> |
Очередь, очередь с приоритетами | |
<set> |
Множество, множество с дубликатами | |
<stack> |
Стек |
<vector> |
Одномерный массив |
Алгоритмы, итераторы, утилиты
<algorithm> |
Алгоритмы |
<cstdlib> |
Сортировка и поиск из библиотеки С |
<ctime> |
Дата и время в стиле С |
<functional> |
Функциональные объекты |
<iterator> |
Итераторы |
<memory> |
Распределители памяти для контейнеров | |
<utility> |
Операторы и пары |
Диагностика, поддержка языка, локализация
1 <cassert> |
Макрос assert |
<сеггпо> |
Обработка ошибок в стиле С |
1 <cfloat> |
Макросы предельных значений в стиле С |
1 <climits> |
Макросы предельных значений в стиле С |
<clocale> |
Локализация в стиле С |
1 <csignal> |
Обработка сигналов в стиле С |
| <cstdarg> |
Поддержка функций с переменным числом аргументов |
1 <cstddef> |
Поддержка языка библиотеки С |
| <cstdlib> |
Завершение программы |
<ctime> |
Системные часы | |
<exception> |
Поддержка исключений | |
<limits> |
Числовые ограничения |
<locale> |
Классы локализации |
<new> |
Работа с динамической памятью | |
<stdexcept> |
Стандартные исключения |
<typeinfo> |
Динамическая идентификация типов | |
Приложение 4. Заголовочные файлы стандартной библиотеки
393
Численные расчеты
, <cmath> |
Математические функции |
<complex> |
Комплексные числа |
<cstdlib> |
Случайные числа в стиле С |
<numeric> |
Числовые операции |
<valarray> |
Классы для численных расчетов |
ПРИЛОЖЕНИЕ
5
Константы, макросы и типы данных стандартной библиотеки
Перечисленные в этом приложении константы, макросы и типы используются в основном в функциях стандартной библиотеки, унаследованных из языка С.
assert <assert.h>
void assertdnt expression); Макрос assert прерывает выполнение программы, если значение выражения expression является ложным (нулевым). При завершении работы выводится сообщение об ошибке вида: Assertion failed: expression, file <имя_файла>, line <но-мер_строки>.
BUFSIZ <stdio.h>
Константа BUFSIZ применяется для задания размера в байтах буфера потока данных функциями fopen(), f reopen(), setbuf (). При открытии потока данных к нему автоматически присоединяется буфер длиной BUFSIZ. Минимальный размер BUFSIZ - 255 байтов.
CHAR BIT <limits.h>
В константе CHAR_BIT хранится количество бит наиболее короткого типа данных (по стандарту — типа char). Минимальное значение CHARJHT — 8.
cin. cout. сегг. clog <iostream.h>
Объекты потоковых классов, связанные со стандартными периферийными уст ройствами.
Приложение 5. Константы, макросы и типы данных стандартной библиотеки 395
Объект |
Поток данных |
Класс |
|
cin |
stdin |
istream |
|
cout |
stdout |
ostream |
|
сегг |
stderr |
ostream |
|
clog |
stderr (буферизованный) |
ostream |
|
CHAR__MAX, |
CHAR_MIN |
|
<1imits.h> |
В константе CHAR_MAX содержится максимальное значение, которое может иметь тип char. Если в конкретной реализации поддерживается тип signed char, то значение CHAR_MAX идентично значению SCHAR_MAX, в противном случае — UCHAR_MAX.
В константе CHARMIN содержится минимальное значение, которое может иметь тип char. Если в конкретной реализации поддерживается тип signed char, то значение CHAR_MIN идентично значению SCHARJ1IN, в противном случае — UCHAR_MIN.
clock t <time.h>
Тип данных c"lock_t предназначен для представления времени:
typedef long clock_t; Значение этого типа возвращает функция clockO.
CLOCKS PER SEC <time.h>
В константе CLOCKS_PER_SEC содержится количество циклов процессора в секунду. Функция clockO возвращает время, выраженное в циклах процессора. Чтобы перевести его в секунды, его необходимо разделить на CLOCKS_PER_SEC.
DBL. <f 1 oat. h>
(см. FLT...)
div t <float.h>
Структура di v_t служит для определения типа возвращаемого значения функции div(). Поле структуры quot содержит частное, а поле гет — остаток от деления.
typedef struct{
int quot;
int rem; }div_t;
EDOM <errno.h>
Макрос EDOM задает отличную от нуля целочисленную константу, что позволяет обнаруживать ошибку области, то есть ошибку, возникающую при выходе аргумента за область значений, для которой определена математическая функция.