Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Языки программирования / Литература по C++ / С.Пратта. Язык программирования С++. Лекции и упражнения

.pdf
Скачиваний:
1942
Добавлен:
31.05.2015
Размер:
52.41 Mб
Скачать

С.Прата

ЯЗЫК ПРОГРАММИРОВАНИЯ 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