Язык программирования C++: Лекции и упражнения. 6-е изд

Язык программирования C++: Лекции и упражнения. 6-е изд

Язык программирования C++: Лекции и упражнения. 6-е изд
Автор: Прата Стивен
Дата выхода: 2012
Издательство: Вильямс
Количество страниц: 1245
Размер файла: 12.1 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Оглавление....6

Содержание....7

Введение....24

Принятый подход....24

Примеры кода, используемые в книге....25

Организация книги....25

Примечание для преподавателей....29

Соглашения, используемые в этой книге....30

Системы, на которых разрабатывались примеры для книги....31

Глава 1. Начало расботы с C++....32

Изучение языка С++: с чем придется иметь дело....33

Истоки языка С++: немного истории....34

Язык программирования С....34

Философия программирования на языке С....35

Переход к С++: объектно-ориентированное программирование....36

С++ и обобщенное программирование....38

Происхождение языка программирования С++....38

Переносимость и стандарты....39

Развитие языка....42

Эта книга и стандарты С++....42

Порядок создания программы....42

Создание файла исходного кода....43

Компиляция и компоновка....44

Компиляция и связывание в Unix....45

Компиляция и связывание в Linux....46

Компиляторы командной строки для режима командной строки Windows....46

Компиляторы для Windows....47

С++ в Macintosh....49

Резюме....49

Глава 2. Приступаем к изучению C++....50

Первые шаги в С++....51

Возможности функции main()....52

Заголовок функции как интерфейс....53

Почему функции main() нельзя назначать другое имя....55

Комментарии в языке С++....55

Препроцессор С++ и файл iostream....56

Имена заголовочных файлов....57

Пространства имен....58

Вывод в С++ с помощью cout....59

Манипулятор endl....61

Символ новой строки....61

Форматирование исходного кода С++....62

Лексемы и пробельные символы в исходном коде....62

Стиль написания исходного кода С++....63

Операторы в языке С++....64

Операторы объявления и переменные....64

Операторы присваивания....66

Новый трюк с объектом cout....67

Другие операторы С++....68

Использование cin....68

Конкатенация с помощью cout....69

cin и cout: признак класса....69

Функции....71

Использование функции, имеющей возвращаемое значение....71

Разновидности функций....75

Функции, определяемые пользователем....76

Использование определяемых пользователем функций, имеющих возвращаемое значение....79

Местоположение директивы using в программах с множеством функций....81

Резюме....82

Вопросы для самоконтроля....83

Упражнения по программированию....84

Глава 3. Работа с данными....86

Простые переменные....87

Имена, назначаемые переменным....88

Целочисленные типы....89

Целочисленные типы short, int, long и long long....90

Типы без знаков....95

Выбор целочисленного типа....97

Целочисленные литералы....98

Определение компилятором С++ типа константы....100

Тип char: символы и короткие целые числа....101

Тип bool....110

Квалификатор const....110

Числа с плавающей точкой....112

Запись чисел с плавающей точкой....112

Типы чисел с плавающей точкой....113

Константы с плавающей точкой....115

Преимущества и недостатки чисел с плавающей точкой....116

Арифметические операции в С++....117

Порядок выполнения операций: приоритеты операций и ассоциативность....118

Операция нахождения остатка от деления....120

Преобразования типов....121

Объявления auto в С++1 1....127

Резюме....128

Вопросы для самоконтроля....129

Упражнения по программированию....130

Глава 4. Составные типы....132

Введение в массивы....133

Замечания по программе....135

Правила инициализации массивов....136

Инициализация массивов в С++1 1....137

Строки....137

Конкатенация строковых литералов....139

Использование строк в массивах....139

Риски, связанные с вводом строк....141

Построчное чтение ввода....142

Смешивание строкового и числового ввода....146

Введение в класс string....147

Инициализация строк в С++1 1....149

Другие формы строковых литералов....154

Введение в структуры....155

Использование структур в программах....156

Инициализация структур в С++1 1....159

Может ли структура содержать член типа s tring?....159

Прочие свойства структур....159

Массивы структур....161

Битовые поля в структурах....162

Объединения....163

Перечисления....164

Установка значений перечислителей....166

Диапазоны значений перечислителей....166

Указатели и свободное хранилище....167

Объявление и инициализация указателей....170

Опасность, связанная с указателями....172

Указатели и числа....173

Выделение памяти с помощью операции new....173

Освобождение памяти с помощью операции delete....176

Использование операции new для создания динамических массивов....177

Указатели, массивы и арифметика указателей....180

Замечания по программе....181

Указатели и строки....185

Использование операции new для создания динамических структур....190

Автоматическое, статическое и динамическое хранилище....193

Комбинации типов....195

Альтернативы массивам....197

Шаблонный класс vector....197

Шаблонный класс array (С++11)....198

Сравнение массивов, объектов vector и объектов array....199

Резюме....200

Вопросы для самоконтроля....202

Упражнения по программированию....203

Глава 5. Циклы и выражения отношений....206

Введение в циклы for....207

Части цикла for....208

Возврат к циклу f or....214

Изменение шага цикла....215

Доступ внутрь строк с помощью цикла f or....216

Операции инкремента и декремента....217

Побочные эффекты и точки следования....218

Сравнение префиксной и постфиксной форм....219

Оnерации инкремента и декремента и указатели....220

Комбинация операций присваивания....221

Составные операторы, или блоки....222

Дополнительные синтаксические трюки - операция запятой....223

Выражения отношений....226

Присваивание, сравнение и вероятные ошибки....227

Сравнение строк в стиле C....229

Сравнение строк класса string....231

Цикл while....232

Замечания по программе....234

Сравнение циклов for и while....235

Построение цикла задержки....236

Цикл do while....238

Цикл for, основанный на диапазоне (С++11)....240

Циклы и текстовый ввод....241

Применение для ввода простого cin....241

Спасение в виде cin.get(char)....243

Выбор используемой версии cin.get()....244

Условие конца файла....244

Еще одна версия cin.get()....247

Вложенные циклы и двумерные массивы....251

Инициализация двумерного массива....252

Использование двумерного массива....253

Резюме....254

Вопросы для самоконтроля....255

Упражнения по программированию....256

Глава 6. Операторы ветвления и логические операции....258

Оператор if....259

Оператор if else....260

Форматирование операторов if else....262

Конструкция if else if else....263

Логические выражения....265

Логическая операция "ИЛИ": ||....265

Логическая операция "И": &&....266

Логическая операция "НЕ": ! ....271

Факты, связанные с логическими операциями....272

Альтернативные представления....273

Библиотека символьных функций cctype....273

Операция ?:....276

Оператор switch....277

Использование перечислителей в качестве меток....280

Операторы switch и if else....281

Операторы break и continue....282

Замечания по программе....283

Циклы для чтения чисел....284

Замечания по программе....287

Простой файловый ввод-вывод....288

Текстовый ввод-вывод и текстовые файлы....288

Запись в текстовый файл....289

Чтение текстового файла....293

Резюме....298

Вопросы для самоконтроля....299

Упражнения по программированию....301

Глава 7. Функции как программные модули С++....304

Обзор функций....305

Определение функции....306

Прототипирование и вызов функции....308

Аргументы функций и передача по значению....311

Множественные аргументы....313

Еще одна функция с двумя аргументами....315

Функции и массивы....317

Как указатели позволяют функциям обрабатывать массивы....319

Последствия использования массивов в качестве аргументов....319

Дополнительные примеры функций для работы с массивами....322

Функции, работающие с диапазонами массивов....328

Указатели и const....330

Функции и двумерные массивы ....333

Функции и строки в стиле С....334

Функции с аргументами - строками в стиле С....335

Функции, возвращающие строки в стиле С....336

Функции и структуры....338

Передача и возврат структур....338

Еще один пример использования функций со структурами....340

Передача адресов структур....345

Функции и объекты класса string....347

Функции и объекты array....348

Замечания по программе....350

Рекурсия....350

Рекурсия с одиночным рекурсивным вызовом....350

Рекурсия с множественными рекурсивными вызовами....352

Указатели на функции....353

Основы указателей на функции....354

Пример с указателем на функцию....356

Вариации на тему указателей на функции....357

Упрощение объявлений с помощью typedef....361

Резюме....362

Вопросы для самоконтроля....363

Упражнения по программированию....364

Глава 8. Дополнительные сведения о функциях....368

Встроенные функции С++....369

Ссылочные переменные....372

Создание ссылочных переменных....372

Ссылки как параметры функций....375

Свойства и особенности ссылок....378

Временные переменные, ссылочные аргументы и квалификатор const....380

Использование ссылок при работе со структурами....382

Использование ссылок на объект класса....389

Еще один урок ООП: объекты, наследование и ссылки....392

Когда целесообразно использовать ссылочные аргументы....395

Аргументы по умолчанию....396

Перегрузка функций....399

Пример перегрузки....401

Когда целесообразно использовать перегрузку функций....404

Шаблоны функций....405

Перегруженные шаблоны....408

Ограничения шаблонов....409

Явные специализации....410

Создание экземпляров и специализация....413

Какую версию функции выбирает компилятор?....415

Эволюция шаблонных функций....422

Резюме....425

Вопросы для самоконтроля....426

Упражнения по программированию....427

Глава 9. Модели памяти и пространства имен....430

Раздельная компиляция....431

Продолжительность хранения, область видимости и компоновка....436

Область видимости и связывание....437

Автоматическая продолжительность хранения....438

Переменные со статической продолжительностью хранения....443

Спецификаторы и классификаторы....453

Функции и связывание....456

Языковое связывание....457

Схемы хранения и динамическое выделение памяти....458

Инициализация с помощью операции new....459

Когда new дает сбой....459

new: операции, функции и заменяющие функции....459

Операция new с размещением....460

Пространства имен....464

Традиционные пространства имен С++....464

Новое средство пространств имен....466

Пример пространства имен....473

Пространства имен и будущее....476

Резюме....477

Вопросы для самоконтроля....478

Упражнения по программированию....480

Глава 10. Объекты и классы....484

Процедурное и объектно-ориентированное программирование....485

Абстракции и классы....486

Что такое тип?....487

Классы в С++....487

Реализация функций-членов класса....493

Использование классов....497

Изменение реализации....499

Обзор ситуации на текущий момент....500

Конструкторы и деструкторы классов....501

Усовершенствование класса Stock....506

Обзор конструкторов и деструкторов....514

Изучение объектов: указатель this....515

Массив объектов....521

Область видимости класса....523

Абстрактные типы данных....527

Резюме....531

Вопросы для самоконтроля....532

Упражнения по программированию....532

Глава 11. Работа с классами....536

Перегрузка операций....538

Время в наших руках: разработка п римера перегрузки операции....539

Добавление операции сложения....541

Ограничения перегрузки....544

Дополнительные перегруженные операции....546

Что такое друзья?....548

Создание друзей....550

Общий вид друга: перегрузка операции <<....551

Перегруженные операции: сравнение функций-членов и функций, не являющихся членами....557

Дополнительные сведения о перегрузке: класс Vector....558

Использование члена, хранящего состояние....565

Перегрузка арифметических операций для класса vector....567

Комментарии к реализации....569

Использование класса vector при решении задачи случайного блуждания....570

Автоматические преобразования и приведения типов в классах....573

Преобразования и друзья....584

Резюме....586

Вопросы для самоконтроля....588

Упражнения по программированию....588

Глава 12. Классы и динамическое выделение памяти ....592

Динамическая память и классы....593

Простой пример и статические члены класса....593

Специальные функции-члены....602

Новый усовершенствованный класс string....610

О чем следует помнить при использовании операции new в конструкторах....620

Замечания о возвращаемых объектах....623

Использование указателей на объекты....626

Обзор технических приемов....635

Моделирование очереди....636

Класс Queue....637

Класс Customer....647

Моделирование работы банкомата....650

Резюме....654

Вопросы для самоконтроля....656

Упражнения по программированию....657

Глава 13. Наследование классов....660

Начало: простой базовый класс....662

Порождение класса....664

Конструкторы: варианты доступа....665

Использование производного класса....668

Особые отношения между производным и базовым классами....670

Наследование: отношение является....672

Полиморфное открытое наследование....674

Разработка классов Brass и BrassPlus....675

Статическое и динамическое связывание....686

Совместимость типов указателей и ссылок....686

Виртуальные функции-члены и динамическое связывание....688

Что следует знать о виртуальных методах....691

Управление доступом: protected....694

Абстрактные базовые классы....695

Применение концепции абстрактных базовых классов....698

Философия АБК....703

Наследование и динамическое выделение памяти....704

Случай 1 : производный класс не использует операцию new....704

Случай 2: производный класс использует операцию new....705

Пример наследования с динамическим выделением памяти и дружественными функциями....707

Обзор структуры класса....712

Функции-члены, генерируемые компилятором....712

Другие соображения относительно методов класса....714

Соображения по поводу открытого наследования....717

Сводка функций классов....721

Резюме....722

Вопросы для самоконтроля....722

Упражнения по программированию....724

Глава 14. Повторное использование кода в С++....728

Классы с объектами-членами....729

Класс valarray: краткий обзор....730

Проект класса student....731

Пример класса Student....732

Закрытое наследование....739

Новый вариант класса student....739

Включение или закрытое наследование?....746

Защищенное наследование....747

Переопределение доступа с помощью usinq....747

Множественное наследование....749

Краткий обзор множественного наследования....765

Шаблоны классов....766

Определение шаблона класса....767

Более внимательный взгляд на шаблонные классы....772

Пример шаблона массива и нетипизированные аргументы....777

Универсальность шаблонов....779

Специализации шаблона....782

Шаблоны-члены....785

Шаблонные классы и друзья....789

Резюме....796

Вопросы для самоконтроля....798

Упражнения по программированию....800

Глава 15. Друзья, исключения и многое другое....806

Друзья....807

Дружественные классы....807

Дружественные функции-члены....812

Другие дружественные отношения....814

Вложенные классы....816

Вложенные классы и доступ....818

Вложение в шаблонах....819

Исключения....822

Вызов abort()....823

Возврат кода ошибки....824

Механизм исключений....826

Использование объектов в качестве исключений....828

Спецификации исключений в С++11....832

Раскручивание стека....833

Дополнительные свойства исключений....838

Класс exception....840

Исключения, классы и наследование....844

Потеря исключений....848

Предостережения относительно использования исключений....851

Динамическая идентификация типов....853

Для чего нужен механизм RTTI....853

Как работает механизм RTTI....853

Операция dynamic_ cast....854

Операции приведения типов....861

Резюме....864

Вопросы для самоконтроля....865

Глава 16. Класс string и стандартная библиотека шаблонов....868

Класс string....869

Создание объекта string....869

Ввод для класса string....873

Работа со строками....876

Другие возможности, предлагаемые классом s tring....881

Разновидности строк....882

Классы шаблонов интеллектуальных указателей....883

Использование интеллектуальных указателей....884

Соображения по поводу интеллектуальных указателей....887

Выбор интеллектуального указателя....891

Стандартная библиотека шаблонов (STL)....893

Класс шаблона vector....893

Что еще можно делать с помощью векторов....895

Дополнительные возможности векторов....900

Цикл fоr, основанный на диапазоне (С++11) ....904

Обобщенное программирование....904

Предназначение итераторов....905

Виды итераторов....909

Иерархия итераторов....912

Концепции, уточнения и модели....913

Виды контейнеров....919

Ассоциативные контейнеры....930

Неупорядоченные ассоциативные контейнеры (С++11)....936

Функциональные объекты (функторы)....937

Концепции функторов....938

Предопределенные функторы....940

Адаптируемые функторы и функциональные адаптеры....942

Алгоритмы....944

Группы алгоритмов....945

Основные свойства алгоритмов....945

Библиотека STL и класс s tring....947

Сравнение функций и методов контейнеров....948

Использование STL....950

Шаблон initializer_list (С++11)....958

Замечания по программе....961

Резюме....961

Вопросы для самоконтроля....963

Упражнения по программированию....964

Глава 17. Ввод, вывод и файлы....968

Обзор ввода и вывода в С++....969

Потоки и буферы....970

Потоки, буферы и файл iostream....972

Перенаправление....974

Вывод с помощью cout....976

Перегруженная операция <<....976

Другие методы ostream....978

Очистка выходного буфера....981

Форматирование с помощью cout....982

Ввод с помощью cin....997

Восприятие ввода операцией cin >>....999

Состояния потока....1001

Другие методы класса istream....1005

Другие методы класса istream....1012

Файловый ввод и вывод....1016

Простой файловый ввод-вывод....1017

Проверка потока и is_open()....1020

Открытие нескольких файлов....1021

Обработка командной строки....1021

Режимы файла....1023

Произвольный доступ....1033

Внутреннее форматирование....1041

Резюме....1043

Вопросы для самопроверки....1045

Упражнения по программированию....1046

Глава 18. Новый стандарт С++....1050

Обзор уже известных функциональных средств С++11....1051

Новые типы....1051

Унифицированная инициализация....1051

Объявления....1053

nullptr....1055

Интеллектуальные указатели....1055

Изменения в спецификации исключений....1055

Перечисления с областью видимости....1055

Изменения в классах....1056

Изменения в шаблонах и STL....1057

Ссылка rvalue....1059

Семантика переноса и ссылка rvalue....1060

Необходимость в семантике переноса....1060

Пример семантики переноса....1062

Исследование конструктора переноса....1066

Присваивание....1068

Принудительное применение переноса....1068

Новые возможности классов....1072

Специальные функции-члены....1072

Явно заданные по умолчанию и удаленные методы....1073

Делегирование конструкторов....1075

Наследование конструкторов....1075

Управление виртуальными методами: override и final....1077

Лямбда-функции....1078

Как работают указатели на функции, функторы и лямбда....1078

Более подробно о лямбда-функциях....1082

Оболочки....1084

Оболочка function и неэффективность шаблонов....1085

Решение проблемы....1087

Дополнительные возможности....1088

Шаблоны с переменным. числом аргументов....1089

Пакеты параметров шаблонов и функций....1090

Распаковка пакетов....1091

Использование рекурсии в шаблонных функциях с переменным числом аргументов....1091

Другие средства С++11....1094

Параллельное программирование....1094

Библиотечные дополнения....1095

Низкоуровневое программирование....1095

Смешанные средства....1096

Языковые изменения....1097

Проект Boost....1097

Проект TR1....1098

Использование Boost....1098

Что дальше?....1099

Резюме....1100

Вопросы для самоконтроля....1101

Упражнения по программированию....1103

Приложение А. Основания систем счисления....1106

Десятичные числа (основание 10)....1106

Восьмеричные целые числа (основание 8)....1107

Шестнадцатеричные числа (основание 16)....1107

Двоичные числа (основание 2)....1108

Двоичная и шестнадцатеричная формы записи....1108

Приложение Б. Зарезервированные слова С++....1110

Ключевые слова С++....1110

Альтернативные лексемы....1111

Зарезервированные имена библиотеки С++....1111

Идентификаторы со специальным назначением....1112

Приложение В. Набор символов ASCII....1114

Приложение Г. Приоритеты операций....1120

Приложение Д. Другие операции....1124

Битовые операции....1124

Операции сдвига....1124

Логические битовые операции....1126

Альтернативные представления битовых операций....1128

Примеры использования битовых операций....1129

Операции разыменования членов....1130

alignof (С++11)....1134

noexcept (С++11)....1135

Приложение Е. Шаблонный класс string....1136

Тринадцать типов и константа....1137

Информация о данных, конструкторы и вспомогательные элементы....1138

Конструктор по умолчанию....1140

Конструкторы, использующие строки в стиле C....1141

Конструкторы, использующие часть строки в стиле C....1141

Конструкторы, использующие ссылку lvalue....1141

Конструкторы, использующие ссылку rvalue (С++11)....1143

Конструктор, использующий n копий символа....1143

Конструктор, использующий диапазон....1143

Конструктор, использующий список инициализаторов (С++11)....1144

Различные действия с памятью....1144

Доступ к строке....1144

Базовое присваивание....1146

Поиск в строках....1146

Семейство find()....1146

Семейство rfind()....1147

Семейство find_first_of()....1148

Семейство find_last_of()....1148

Семейство find_first_not_of()....1148

Семейство find_last_not_of()....1149

Методы и функции сравнения....1149

Мдификация строк....1150

Методы присоединения и добавления....1151

Дополнительные методы присваивания....1151

Методы вставки....1152

Методы очистки....1153

Методы замены....1153

Другие методы модификации: сору() и swap()....1154

Ввод и вывод....1154

Приложение Ж. Методы и функции стандартной библиотеки шаблонов....1156

Библиотека STL и С++11....1156

Новые контейнеры....1156

Изменения в контейнерах С++98....1157

Члены, общие для всех или большинства контейнеров....1158

Дополнительные члены для контейнеров последовательностей....1161

Дополнительные операции для множеств и карт....1165

Неупорядоченные ассоциативные контейнеры (С++11)....1167

Функции библиотеки STL....1169

Операции, не модифицирующие последовательности....1170

Операции, видоизменяющие последовательности....1175

Операции сортировки и связанные с ними операции....1185

Числовые операции....1198

Приложение 3. Рекомендуемая литература и ресурсы в Интернете....1202

Рекомендуемая литература....1202

Ресурсы в и нтернете....1204

Приложение И. Переход к стандарту ANSI/ISO С++....1206

Используйте альтернативы для некоторых директив препроцессора....1206

Используйте const вместо #define для определения констант....1206

Используйте inline вместо #define для определения коротких функций....1208

Используйте прототипы функций....1209

Используйте приведения типов....1209

Знакомьтесь с функциональными возможностями С++....1210

Используйте новую организацию заголовочных файлов....1210

Используйте пространства имен....1210

Используйте интеллектуальные указатели....1212

Используйте класс string....1212

Используйте библиотеку STL....1212

Приложение К. Ответы на вопросы для самоконтроля....1214

Ответы на вопросы для самоконтроля из главы 2 ....1214

Ответы на вопросы для самоконтроля из главы 3....1215

Ответы на вопросы для самоконтроля из главы 4....1216

Ответы на вопросы для самоконтроля из главы 5....1218

Ответы на вопросы для самоконтроля из главы 6....1219

Ответы на вопросы для самоконтроля из главы 7....1220

Ответы на вопросы для самоконтроля из главы 8....1222

Ответы на вопросы для самоконтроля из главы 9....1224

Ответы на вопросы для самоконтроля из главы 10....1226

Ответы на вопросы для самоконтроля из главы 11....1228

Ответы на вопросы для самоконтроля из главы 12....1229

Ответы на вопросы для самоконтроля из главы 13....1231

Ответы на вопросы для самоконтроля из главы 14....1233

Ответы на вопросы для самоконтроля из главы 15....1234

Ответы на вопросы для самоконтроля из главы 16....1235

Ответы на вопросы для самоконтроля из главы 17....1237

Ответы на вопросы для самоконтроля из главы 18....1238

Предметный указатель ....1241

В этой книге обсуждается базовый язык С и текущие функциональные средства С++, что делает ее самодостаточной. В ней представлены основы языка С++, иллюстрируемые с помощью коротких и точных программ, которые легко скопировать для дальнейших экспериментов. Вы узнаете о вводе-выводе, о решении повторяющихся задач и возможностях выбора, о способах обработки данных и о функциях. Будут описаны многие средства С++, которые были добавлены к языку С.


Похожее:

Список отзывов:

Нет отзывов к книге.