
Языки программирования / Литература по C++ / С.Пратта. Язык программирования С++. Лекции и упражнения
.pdfС.Прата
ЯЗЫК ПРОГРАММИРОВАНИЯ C++. ЛЕКЦИИ И УПРАЖНЕНИЯ
Изучение языка программирования C++ является приключением, ведущим к открытиям. Это связано с тем, что C++ непрерывно развивается. В этой книге рассказывается о стандартном языке C++ без привязки к какому-либо одному виду компьютера, операционной системы или компилятора. Здесь вы найдете подробнейшее описание синтаксиса языка, сопровождаемое многочисленными практическими примерами. Цель книги - научить читателя создавать эффективные программы и получать от этого удовольствие.
Издание рассчитано на пользователей с любым уровнем подготовки. Для начинающих эта книга послужит превосходным учебником, а опытные программисты смогут воспользоваться ею в качестве справочника, облегчающего их ежедневный труд.
Учитывая уровень рассмотрения теоретических вопросов и наличие тщательно подобранных упражнений, книгу можно рекомендовать как методическое пособие преподавателям высших и средних учебных заведений, а также в качестве учебника для студентов.
Краткое оглавление |
|
Глава 1. Готовимся изучать язык C++ |
21 |
Глава 2. Приступаем к изучению языка C++ |
32 |
Глава 3. Представление данных |
52 |
Глава 4. Производные типы данных |
79 |
Глава 5. Циклы и выражения сравнения |
115 |
Глава 6. Операторы ветвления и логические операции |
145 |
Глава 7. Функции языка C++ |
164 |
Глава 8. Работа с функциями |
196 |
Глава 9. Объекты и классы |
245 |
Глава 10. Работа с классами |
274 |
Глава 11. Классы и динамическое распределение памяти |
306 |
Глава 12. Наследование классов |
345 |
Глава 13. Повторное использование программного кода в C++ |
381 |
Глава 14. Дружественные конструкции, исключения и прочее |
424 |
Глава 15. Класс string и стандартная библиотека шаблонов |
465 |
Глава 16. Ввод/вывод данных и работа с файлами |
516 |
Приложение А. Системы счисления |
568 |
Приложение В. Ключевые слова языка C++ |
570 |
Приложение С. Таблица кодов ASCII |
571 |
Приложение D. Приоритет операций |
575 |
Приложение Е. Другие операции |
578 |
Приложение F. Класс шаблона STRING |
583 |
Приложение G. Методы и функции библиотеки STL |
594 |
Приложение Н. Рекомендуемая литература |
615 |
Приложение I. Преобразование программного кода |
|
в соответствии со стандартом ANSI/ISO C++ |
617 |
Приложение J. Ответы на вопросы для повторения |
622 |
Предметный указатель |
634 |
Оглавление |
|
Глава 1. Готовимся изучать язык C++ |
21 |
Изучение языка C++ |
21 |
Немного истории |
22 |
Язык С |
22 |
Философия программирования, заложенная в языке С |
23 |
Объектно-ориентированное программирование |
23 |
Обобщенное программирование |
24 |
Язык C++ |
24 |
Переносимость и стандарты |
25 |
Методика создания программ |
26 |
Создание исходного кода |
27 |
Компиляция и компоновка |
28 |
Компиляция и компоновка в операционной системе UNIX |
28 |
Реализации Turbo C++ 2.0 и Borland C++ 3.1 (DOS) |
29 |
Компиляторы для операционной системы Windows |
29 |
Компиляторы для компьютеров Macintosh |
30 |
Соглашения, используемые в этой книге |
31 |
Наша система |
31 |
Глава 2. Приступаем к изучению языка C++ |
32 |
Начальные сведения о языке C++ |
32 |
Функция main() |
33 |
Заголовок функции в роли интерфейса |
34 |
Когда функция main() не соответствует своему названию? |
35 |
Комментарии в языке C++ |
35 |
Препроцессор C++ и файл iostream |
36 |
Имена заголовочных файлов |
36 |
Области имен |
36 |
Вывод данных в языке C++ с использованием объекта cout |
37 |
Символ новой строки (\n) |
38 |
Форматирование исходного кода C++ |
39 |
Формат исходного кода программ C++ |
40 |
Краткие сведения об операторах языка C++ |
40 |
Операторы объявления и переменные |
40 |
Оператор присваивания |
41 |
Важный момент, связанный с объектом cout |
41 |
Еще несколько операторов языка C++ |
42 |
Применение объекта cin |
42 |
И снова объект cout |
43 |
Несколько слов о классах |
43 |
Функции |
44 |
Применение функций с возвращаемым значением |
44 |
Разновидности функций |
46 |
Функции, определяемые пользователем |
47 |
Формат определения функции |
47 |
Заголовки функций |
48 |
Определяемая пользователем функция с возвращаемым значением |
49 |
Итак, операторы |
50 |
Резюме |
50 |
Вопросы для повторения |
51 |
Упражнения по программированию |
51 |
Глава 3. Представление данных |
52 |
Простые переменные |
52 |
Имена переменных |
53 |
Целочисленные типы данных |
54 |
Типы даных short, int и long |
54 |
Примечания к программе |
56 |
Типы данных без знака |
57 |
Какой тип выбрать? |
58 |
Целочисленные константы |
59 |
Определение типа константы в C++ |
60 |
Тип данных char: символы и малые целые числа |
60 |
Примечания к программе |
61 |
Функция-элемент: cout.put() |
62 |
Константы типа char |
62 |
Типы данных signed char и unsigned char |
64 |
Тип данных wchar_t |
64 |
Новый тип данных bool |
65 |
Квалификатор const |
65 |
Числа с плавающей точкой |
66 |
Запись чисел с плавающей точкой |
66 |
Типы данных с плавающей точкой |
67 |
Примечания к программе |
69 |
Константы с плавающей точкой |
69 |
Преимущества и недостатки типов данных с плавающей точкой |
69 |
Арифметические операции языка C++ |
70 |
Приоритет операций и ассоциативность |
71 |
Разновидности операции деления |
71 |
Операция деления по модулю |
72 |
Преобразования типов данных |
73 |
Преобразование при присваивании |
73 |
Преобразования данных в выражениях |
74 |
Преобразования данных при передаче аргументов |
75 |
Приведение типов |
75 |
Резюме |
77 |
Вопросы для повторения |
77 |
Упражнения по программированию |
78 |
Глава 4. Производные типы данных |
79 |
Краткий обзор массивов |
79 |
Примечания к программе |
81 |
Еще об инициализации массива |
81 |
Строки |
82 |
Конкатенация строк |
83 |
Использование строк в массиве |
83 |
Примечания к программе |
84 |
Возможные нюансы при строковом вводе |
84 |
Строчно-ориентированный ввод: getline() и get() |
85 |
Пустые строки и другие проблемы |
87 |
Смешанный строчно-числовой ввод |
87 |
Краткий обзор структур |
88 |
Примечания к программе |
90 |
Другие свойства структуры |
90 |
Массивы структур |
91 |
Разрядные поля |
92 |
Объединения |
92 |
Перечисления |
93 |
Установка значений перечислителя |
94 |
Диапазоны значений для перечислений |
94 |
Указатели и свободная память |
95 |
Объявление и инициализация указателей |
97 |
Указатели и числа |
98 |
Распределение памяти с помощью оператора new |
99 |
Примечания к программе |
100 |
Освобождение памяти с помощью |
|
оператора delete |
100 |
Использование оператора new для создания динамических массивов |
101 |
Создание динамического массива с помощью оператора new |
101 |
Использование динамического массива |
102 |
Указатели, массивы и арифметика указателей |
103 |
Примечания к программе |
104 |
Основные сведения об указателях |
105 |
Указатели и строки |
106 |
Примечания к программе |
106 |
Использование оператора new для создания динамических структур |
109 |
Пример использования операторов new и delete |
110 |
Примечания к программе |
111 |
Автоматическая, статическая и свободная память |
111 |
Автоматические переменные |
112 |
Статическая память |
112 |
Свободная память |
112 |
Резюме |
112 |
Вопросы для повторения |
113 |
Упражнения по программированию |
114 |
Глава 5. Циклы и выражения сравнения |
115 |
Обзор возможностей цикла for |
115 |
Составные элементы цикла for |
116 |
Выражения и операторы |
117 |
Операторы и выражения |
119 |
Незначительное нарушение правил |
119 |
Снова о цикле for |
120 |
Примечания к программе |
120 |
Изменение шага цикла |
121 |
Доступ к символам строки с помощью цикла for |
121 |
Операторы инкремента (++) и декремента (--) |
122 |
Комбинированные операторы присваивания |
123 |
Составные операторы или блоки |
123 |
Оператор "запятая" (или дополнительные синтаксические приемы) |
124 |
Примечания к программе |
125 |
Особенности применения оператора "запятая" |
126 |
Выражения сравнения |
126 |
Типичная ошибка программирования |
126 |
Сравнение строк |
128 |
Примечания к программе |
129 |
Цикл while |
129 |
Примечания к программе |
130 |
Сравнение циклов for и while |
131 |
Небольшая пауза |
132 |
Цикл do while |
133 |
Циклы и ввод текста |
134 |
Применение простого оператора cin для ввода данных |
134 |
Примечания к программе |
135 |
На помощь приходит функция cin.get(char) |
135 |
Выбор функции cin.get() |
136 |
Условие конца файла |
136 |
Конец файла означает конец ввода |
137 |
Распространенные идиомы |
138 |
Еще одна разновидность функции cin.get() |
138 |
Вложенные циклы и двумерные массивы |
140 |
Инициализация двумерного массива |
141 |
Резюме |
142 |
Вопросы для повторения |
143 |
Упражнения по программированию |
143 |
Глава 6. Операторы ветвления и логические операции |
145 |
Оператор if |
145 |
Оператор if else |
146 |
Форматирование операторов if else |
147 |
Конструкция if else if else |
147 |
Логические выражения |
148 |
Операция логического ИЛИ: || |
148 |
Операция логического И: && |
149 |
Примечания к программе |
150 |
Определение диапазонов с помощью операции && |
150 |
Примечания к программе |
151 |
Операция логического НЕ: ! |
151 |
Примечания к программе |
152 |
Немного о логических операциях |
152 |
Библиотека символьных функций cctype |
153 |
Оператор ?: |
154 |
Оператор switch |
155 |
Использование перечислителей в качестве меток |
157 |
Операторы switch и if else |
157 |
Операторы break и continue |
158 |
Примечания к программе |
158 |
Циклы считывания чисел |
159 |
Примечания к программе |
161 |
Резюме |
161 |
Вопросы для повторения |
161 |
Упражнения по программированию |
162 |
Глава 7. Функции языка C++ |
164 |
Обзор функций |
164 |
Определение функции |
165 |
Прототипирование и вызов функций |
166 |
Почему именно прототипы? |
167 |
Синтаксис прототипа |
167 |
Польза прототипов |
168 |
Аргументы функции и передача по значению |
169 |
Функции с несколькими аргументами |
169 |
Примечания к программе |
171 |
Еще одна функция с двумя аргументами |
171 |
Примечания к программе |
172 |
Функции и массивы |
172 |
Массивы и указатели (продолжение) |
173 |
Трудности, возникающие при использовании массивов в качестве |
174 |
аргументов |
|
Примечания к программе |
175 |
Другие виды функций, выполняющих обработку массивов |
176 |
Заполнение массива |
176 |
Отображение массива и его защита с помощью спецификатора |
177 |
const |
|
Модификация элементов массива |
177 |
Объединение частей в единое целое |
178 |
Примечания к программе |
179 |
Указатели и спецификатор const |
179 |
Функции и строки в стиле С |
180 |
Примечания к программе |
181 |
Функции, возвращающие строки |
182 |
Примечания к программе |
182 |
Функции и структуры |
183 |
Передача и возврат структур |
183 |
Еще один пример |
184 |
Примечания к программе |
186 |
Передача адресов структур |
187 |
Рекурсия |
188 |
Примечания к программе |
189 |
Указатели на функции |
189 |
Назначение указателя на функцию |
190 |
Получение адреса функции |
190 |
Объявление указателя на функцию |
190 |
Использование указателя для вызова функции |
191 |
Резюме |
192 |
Вопросы для повторения |
193 |
Упражнения по программированию |
193 |
Глава 8. Работа с функциями |
196 |
Встроенные функции |
196 |
Ссылочные переменные |
198 |
Создание ссылочных переменных |
198 |
Ссылки в роли параметров функции |
200 |
Примечания к программе |
202 |
Свойства и особенности ссылок |
202 |
Временные переменные, ссылочные аргументы и модификатор |
203 |
const |
|
Использование ссылок при работе со структурами |
204 |
Примечание к программе |
205 |
Некоторые соображения по вопросу о том, когда возвращать |
206 |
ссылку или указатель |
|
Когда имеет смысл пользоваться ссылочными аргументами |
207 |
Аргументы, заданные по умолчанию |
207 |
Примечания к программе |
209 |
Полиморфизм функций (перегрузка функции) |
209 |
Пример перегрузки |
211 |
Когда целесообразно использовать |
|
перегрузку функции |
212 |
Шаблоны функций |
212 |
Перегруженные шаблоны |
214 |
Явная специализация |
215 |
Метод первой генерации |
216 |
Вторая генерация |
216 |
Третья генерация |
216 |
Пример |
217 |
Образование шаблонов и специализация |
218 |
Выбор функций |
219 |
Точное соответствие и наилучшее соответствие |
220 |
Функции со многими аргументами |
221 |
Раздельная компиляция |
221 |
Классы памяти, диапазоны доступа и связывание |
224 |
Диапазон доступа и связывание |
224 |
Автоматическая память |
225 |
Автоматические переменные и работа со стеком |
226 |
Переменные типа register |
227 |
Статический класс памяти |
228 |
Внешние переменные |
228 |
Примечания к программе |
229 |
Модификатор static (локальные переменные) |
230 |
Связывание и внешние переменные |
231 |
Спецификаторы классов памяти:const, volatile и mutable |
233 |
Более подробно о спецификаторе const |
234 |
Классы памяти и функции |
235 |
Языковое связывание |
235 |
Классы памяти и динамическое распределение |
236 |
Пространства имен |
236 |
Традиционные пространства имен языка C++ |
237 |
Новые свойства пространства имен |
238 |
Объявления использования и директивы using |
238 |
Немного больше о свойствах пространства имен |
240 |
Неименованные пространства имен |
241 |
Пространства имен и будущее |
241 |
Резюме |
241 |
Вопросы для повторения |
242 |
Упражнения по программированию |
243 |
Глава 9. Объекты и классы |
245 |
Процедурное и объектно-ориентированное программирование |
245 |
Абстрагирование и классы |
246 |
Что представляет собой тип |
247 |
Класс |
247 |
Общедоступный или приватный? |
249 |
Реализация классов и функций-элементов |
250 |
Примечания, касающиеся функций-элементов |
251 |
Встроенные методы |
252 |
Выбор объекта |
252 |
Использование классов |
253 |
Текущее состояние дел |
254 |
Деструкторы и конструкторы классов |
255 |
Объявление и определение конструкторов |
256 |
Использование конструктора |
256 |
Конструктор, заданный по умолчанию |
257 |
Деструкторы |
258 |
Совершенствование класса Stock |
258 |
Заголовочный файл |
259 |
Файл реализации |
259 |
Клиентский файл |
260 |
Примечания к программе |
260 |
Функции-элементы типа const |
261 |
Обзор конструкторов и деструкторов |
262 |
Работа с указателем this |
263 |
Массив объектов |
266 |
Диапазон доступа класса |
267 |
Абстрактный тип данных |
268 |
Резюме |
271 |
Вопросы для повторения |
272 |
Упражнения по программированию |
272 |
Глава 10. Работа с классами |
274 |
Перегрузка операций |
275 |
Время в нашем распоряжении |
276 |
Добавление операции сложения |
277 |
Ограничения при выполнении перегрузки |
278 |
Другие перегруженные операции |
279 |
Использование дружественных структур |
280 |
Создание дружественных конструкций |
281 |
Общий вид дружественной конструкции: перегрузка операции << |
282 |
Первая версия перегрузки операции << |
282 |
Вторая версия перегрузки операции << |
283 |
Перегруженные операции: дружественные и обычные функции |
285 |
Перегрузка: класс Vector |
286 |
Использование элементов состояния |
291 |
Еще немного о перегрузке |
291 |
Умножение |
292 |
Некоторые уточнения: перегрузка и перегруженная операция |
292 |
Комментарий к реализации |
293 |
Применение класса Vector к решению задачи случайного блуждания |
293 |
Примечания к программе |
295 |
Автоматические преобразования и приведение типов для классов |
295 |
Примечания к программе |
298 |
Функции преобразования |
299 |
Автоматическое выполнение преобразования типов |
300 |
Преобразования и дружественные конструкции |
302 |
Осуществление выбора |
303 |
Резюме |
303 |
Вопросы для повторения |
304 |
Упражнения по программированию |
305 |
Глава 11. Классы и динамическое распределение памяти |
306 |
Динамическая память и классы |
306 |
Обзорный пример и элементы статических классов |
307 |
Примечания к программе |
311 |
Новый подход к использованию операторов new и delete |
313 |
Устранение проблем, связанных с классом String |
314 |
Неявные функции-элементы |
315 |
Конструктор, заданный по умолчанию |
315 |
Конструктор копирования |
315 |
Условия применения конструктора копирования |
315 |
Функции конструктора копирования |
316 |
К чему могут привести возможные ошибки |
316 |
Оператор присваивания |
318 |
Применение оператора присваивания |
318 |
Функции оператора присваивания |
319 |
К чему могут привести возможные ошибки |
319 |
Фиксированное присваивание |
319 |
Новый, усовершенствованный класс String |
320 |
Применение оператора new в конструкторах |
325 |
Применение указателей при работе с объектами |
326 |
Обзор технических методов |
328 |
Перегрузка операции << |
328 |
Функции преобразования |
329 |
Классы, конструкторы которых применяют оператор new |
329 |
Моделирование очереди |
329 |
Класс Queue |
330 |
Интерфейс |
330 |
Реализация |
330 |
Методы класса |
332 |
Немного сведений о других методах классов |
334 |
Класс Customer |
335 |
Моделирование |
338 |
Резюме |
341 |
Вопросы для повторения |
342 |
Упражнения по программированию |
343 |
Глава 12. Наследование классов |
345 |
Простой базовый класс |
346 |
Наследование — отношение is-a |
347 |
Объявление производного класса |
349 |
Реализация производного класса |
351 |
Инициализация объектов объектами |
352 |
Другие функции-элементы |
352 |
Примечания к программе |
355 |