Учебный курс языка C++.

Джесс Либерти «Освой самостоятельно C++ за 21 день» Вильямс, 2000 год, 834 стр. (8,57 мб. djvu)

Книга поможет читателю изучить Язык C+с нуля. Пройдя курс обучения в течении 21 дня, вы узнаете о самом необходимом: управление вводом-выводом, циклах, массивах, объектно-ориентированном программировании, шаблонам и создании приложений на C++. Весь курс организован в уроки, в порядке усложнения рассматриваемых тем, проиллюстрированных листингами программ, дополненных результатами их работы и анализом инструкций. Для более качественного восприятия уроков, в конце каждого представлен список часто задаваемых вопросов с ответами на них, тесты и упражнения для самоконтроля.

Проверить правильность ответов можно в приложении Г. Так, как представленный курс предполагает изучение языка программирования C+с нуля, читателю не обязательно иметь предыдущий опыт разработки. Работая с книгой, вы изучите язык, и его концепции, являющиеся базовыми для программирования на C+. Верным и надежным проводником станут представленные примеры синтаксиса и доскональный анализ приводимых здесь программ. Начинаете ли вы изучать C+с нуля или у вас уже есть определенный опыт программирования — в любом случае руководство создаст все условия для простого и эффективного изучения языка C++.
ISBN:5-8459-0056-5, 0-672-31515-7

Оглавление книги
НЕДЕЛЯ 1 ОСНОВНЫЕ ВОПРОСЫ 23
Несколько слов для программистов на языке C 23
Что дальше 23

День 1. Первые шаги 24
Введение 24
Краткий экскурс в историю языка C++ 24
Программы 25
Решение многих проблем 25
Процедурное, структурированное и объектно-ориентированное программирование 26

Язык C++ и объектно-ориентированное программирование 28
Эволюция языка C++ 29
Нужно ли сначала изучить язык C 29
C++ и Java 29
Стандарт ANSI 30
Подготовка к программированию 30
Среда разработки 31
Компиляция исходного кода программы 31
Создание исполняемого файла с помощью компоновщика 32
Цикл разработки 33
Первая программа на языке C++ — HELLO.срр 33
Осваиваем компилятор Visual C++ 6 36
Построение проекта приветствия 36
Ошибки компиляции 37
Резюме 37
Вопросы и ответы 38
Коллоквиум 3 8
Контрольные вопросы 38
Упражнения 3 9

День 2. Составные части программы на языке C++ 40
Простая программа на языке C++ 40
Кратко об объекте cout 42
Комментарии 44
Виды комментариев 44
Использование комментариев 45
Напоследок предупреждение: осторожнее с комментариями! 45
Функции 46
Использование функций 47
Резюме 49
Вопросы и ответы 49
Коллоквиум 49
Контрольные вопросы 49
Упражнения 50

День 3. Переменные и константы 51
Что такое переменная 51
Резервирование памяти 52
Размер целых 52
Знаковые и беззнаковые типы 53
Базовые типы переменных 54
Определение переменной 55
Чувствительность к регистру букв 56
Ключевые слова 57
Создание нескольких переменных одного типа 57
Присваивание значений переменным 58
Ключевое слово typedef 59
В каких случаях следует использовать типы short и long 60
Переполнение беззнаковых целых 61
Переполнение знаковых целочисленных значений 61
Символы 62
Символы и числа 63
Специальные символы 63
Константы 64
Литеральные константы 64
Символьные константы 64
Определение констант с помощью директивы #deiine 65
Определение констант с помощью ключевого слова const 65
Константы перечислений 66
Резюме 68
Вопросы и ответы 68
Коллоквиум 69
Контрольные вопросы 70
Упражнения 7 0

День 4. Выражения и операторы 71
Выражения 71
Символы пробелов 72
Блоки и комплексные выражения 72
Операции 72
Операторы 74
Оператор присваивания 74
Математические операторы 74
Целочисленное деление и деление по модулю 75
Совместное использование математических операторов с операторами присваивания 77
Инкремент и декремент 77
Префикс и постфикс 78
Приоритеты операторов 80
Вложение круглых скобок 80
Что такое ИСТИННО 81
Операторы отношений 82
Оператор 83
Использование отступов в программных кодах 86
Ключевое слово else 86
Сложные конструкции с 88
Использование фигурных скобок для вложенных операторов 90
Логические операторы 92
Логическое И 93
Логическое ИЛИ 93
Логическое НЕТ 93
Вычисление по сокращенной схеме 93
Приоритеты операторов отношений 94
Подробнее об истине и лжи 95
Условный оператор 95
Резюме 97
Вопросы и ответы 97
Коллоквиум 98
Контрольные вопросы 98
Упражнения 98

День 5. Функции 100
Что такое функция 100
Возвращаемые значения, параметры и аргументы 101
Объявление и определение функций 101
Объявление функции 102
Прототипы функций 102
Определение функции 104
Выполнение функций 106
Локальные переменные 106
Глобальные переменные 108
Глобальные переменные; будьте начеку 109
Подробнее о локальных переменных 110
Операторы, используемые в функциях 111
Подробнее об аргументах функций 112
Использование функций в качестве параметров функций 112
Параметры — это локальные переменные 113
Подробнее о возвращаемых значениях 114
Значения параметров, используемые по умолчанию 116
Перегрузка функций 119
Дополнительные сведения о функциях 121
Подставляемые inline-функции 122
Рекурсия 123
Работа функций — приподнимем завесу тайны 128
Уровни абстракции 128
Разбиение памяти 129
Стек и функции 131
Резюме 132
Вопросы и ответы 132
Коллоквиум 133
Контрольные вопросы 133
Упражнения 134

День 6. Базовые классы 135
Создание новых типов 135
Зачем создавать новый тип 136
Классы и члены 136
Объявление класса 136
Несколько слов об используемых именах 137
Определение объекта 138
Классы в сравнении с объектами 138
Получение доступа к членам класса 138
Значения присваиваются объектам, а не классам 138
Что объявишь, то и будешь иметь 139
Ограничение доступа к членам класса 139
Оставьте данные класса закрытыми 142
Ограничение доступа к данным — средство облегчения программирования 143
Определение методов класса 145
Конструкторы и деструкторы 147
Конструкторы и деструкторы, заданные по умолчанию 148
Использование конструктора, заданного по умолчанию 148
Объявление функций-членов со спецификатором const 151
Чем отличается интерфейс от выполнения класса 152
Где следует располагать в программе объявления классов и определения методов 155
Выполнение с подстановкой 156
Классы, содержащие другие классы в качестве данных-членов 159
Структуры 162
Почему два ключевых слова несут одинаковую смысловую нагрузку 163
Резюме 163
Вопросы и ответы 164
Коллоквиум 165
Контрольные вопросы 165
Упражнения 165

День 7. Циклы 167
Организация циклов 167
История оператора goto 167
Почему следует избегать оператора goto 168
Организация циклов с помощью оператора while 169
Сложные конструкции с оператором while 170
Операторы break и continue 171
Использование конструкции while(true) 173
Организация циклов с помощью конструкции do…while 174
Использование конструкции do…while 175
Оператор for 176
Сложные выражения с оператором for 178
Использование пустых циклов for 181
Вложенные циклы 182
Область видимости переменных-счетчиков циклов for 183
Обобщение сведений о циклах 184
Оператор switch 186
Обработка команд меню с помощью оператора switch 189
Резюме 192
Вопросы и ответы 192
Коллоквиум 192
Контрольные вопросы 193
Упражнения 193

НЕДЕЛЯ 2 ОСНОВНЫЕ ВОПРОСЫ 201
Что дальше 201
День 8. Указатели 202
Что такое указатель 202
Использование указателя как средства хранения адреса 204
Имена указателей 206
Оператор разыменования 206
Указатели, адреса и переменные 207
Обращение к данными через указатели 208
Использование адреса, хранящегося в указателе 209
Для чего нужны указатели 211
Память стековая и динамически распределяемая 211
Оператор new 212
Оператор delete 213
Что такое утечка памяти 215
Размещение объектов в области динамически памяти 215
Удаление объектов 216
Доступ к членам класса 217
Динамическое размещение членов класса 218
Указатель this 221
Блуждающие, дикие или зависшие указатели 222
Использование ключевого слова const при объявлении указателей 225
Использование ключевого слова const при объявлении указателей и функций-членов 226
Указатель const this 227
Вычисления с указателями 228
Резюме 230
Вопросы и ответы 231
Коллоквиум 231
Контрольные вопросы 231
Упражнения 231

День 9. Ссылки 233
Что такое ссылка 233
Использование оператора адреса (&) при работе со ссылками 234
Ссылки нельзя переназначать 236
На что можно ссылаться 237
Нулевые указатели и нулевые ссылки 239
Передача аргументов функций как ссылок 239
Передача указателей в функцию swap() 241
Передача ссылок в функцию swap() 242
Представления о заголовках функций и прототипах 243
Возвращение нескольких значений 244
Возвращение значений с помощью ссылок 246
Передача ссылок на переменные как средство повышения эффективности 247
Передача константного указателя 250
Ссылки в качестве альтернативы 253
Когда лучше использовать ссылки, а когда — указатели 255
Коктейль из ссылок и указателей 256
Не возвращайте ссылку на объект, который находится вне области видимости! 257
Возвращение ссылки на объект в области динамического обмена 259
А где же указатель? 261
Резюме 261
Вопросы и ответы 262
Коллоквиум 262
Контрольные вопросы 262
Упражнения 263

День 10. Дополнительные возможности использования функции 264
Перегруженные функции-члены 264
Использование значений, заданных по умолчанию 266
Выбор между значениями по умолчанию и перегруженными функциями 269
Конструктор, принятый по умолчанию 269
Перегрузка конструкторов 269
Инициализация объектов 271
Конструктор-копировщик 272
Перегрузка операторов 276
Запись функции инкремента 277
Перегрузка префиксных операторов 278
Типы возвратов перегруженных функций операторов 280
Возвращение безымянных временных объектов 281
Использование указателя this 283
Перегрузка постфиксных операторов 284
Различия между преинкрементом и постинкрементом 284
Оператор суммирования 286
Перегрузка оператора суммирования 288
Основные принципы перегрузки операторов 290
Ограничения перегрузки операторов 290
Что можно перегружать 290
Оператор присваивания 291
Операторы преобразований 293
Операторы преобразования типов 296
Резюме 297
Вопросы и ответы 298
Коллоквиум 299
Контрольные вопросы 299
Упражнения 299

День 11. Наследование 301
Что такое наследование 301
Иерархия и наследование 302
Царство животных 303
Синтаксис наследования классов 303
Закрытый или защищенный 305
Конструкторы и деструкторы 307
Передача аргументов в базовые конструкторы 309
Замещение функций 313
Сокрытие метода базового класса 315
Вызов базового метода 317
Виртуальные методы 319
Как работают виртуальные функции 323
Нельзя брать там, находясь здесь 324
Дробление объекта 324
Виртуальные деструкторы 326
Виртуальный конструктор-копировщик 327
Цена виртуальности методов 330
Резюме 330
Вопросы и ответы 331
Коллоквиум 331
Тест 331
Упражнения 332

День 12. Массивы и связанные листы 333
Что такое массивы 333
Элементы массива 333
Ввод данных за пределы массива 335
Ошибки подсчета столбов для забора 338
Инициализация массива 338
Объявление массивов 340
Массивы объектов 341
Многомерные массивы 343
Инициализация многомерного массива 344
Несколько слов о памяти 345
Массивы указателей 346
Объявление массивов в области динамического обмена 347
Указатель на массив или массив указателей 348
Имена массивов и указателей 348
Удаление массива из области динамической памяти 350
Массивы символов 351
Функции strcpy() и stmcpy() 353
Классы строк 354
Связанные списки и другие структуры 360
Общие представления о связанных списках 361
Делегирование ответственности 361
Компоненты связанных списков 362
Что мы узнали в этой главе 371
Классы массивов 371
Резюме 372
Вопросы и ответы 372
Коллоквиум 373
Контрольные вопросы 373
Упражнения 373

День 13. Полиморфизм 374
Проблемы с одиночным наследованием 374
Перенос метода вверх по иерархии классов 377
Приведение указателя к типу производного класса 377
Добавление объекта в два списка 380
Множественное наследование 380
Из каких частей состоят объекты, полученные в результате 383
множественного наследования Конструкторы классов, полученных в результате множественного наследования 384
Двусмысленность ситуации 386
Наследование от общего базового класса 387
Виртуальное наследование 391
Проблемы с множественным наследованием 394
Классы-мандаты 395
Абстрактные типы данных 396
Чистые виртуальные функции 399
Выполнение чистых виртуальных функций 401
Сложная иерархия абстракций 404
Когда следует использовать абстрактные типы данных 408
Логика использования абстрактных классов 408
Пара слов о множественном наследовании, абстрактных типах данных и языке Java 409
Резюме 410
Вопросы и ответы 410
Коллоквиум 411
Контрольные вопросы 411
Упражнения 411

День 14. Специальные классы и функции 413
Статические переменные-члены 413
Статические функции-члены 418
Указатели на функции 420
Зачем нужны указатели на функции 423
Массивы указателей на функции 426
Передача указателей на функции в другие функции 429
Использование typedef с указателями на функции 431
Указатели на функции-члены 433
Массивы указателей на функции-члены 436
Резюме 438
Вопросы и ответы 438
Коллоквиум 439
Контрольные вопросы 439
Упражнения 439

НЕДЕЛЯ 3 ОСНОВНЫЕ ВОПРОСЫ 451
Что дальше 451
День 15. Дополнительные возможности наследования 452
Вложение 452
Доступ к членам вложенного класса 458
Фильтрация доступа к вложенным классам 458
Цена вложений 459
Передача объекта как значения 462
Различные пути передачи функциональности классу 465
Делегирование 466
Закрытое наследование 475
Классы друзья 483
Функции друзья 492
Функции друзья и перегрузка оператора 492
Перегрузка оператора вывода 497
Резюме 501
Вопросы и ответы 502
Коллоквиум 502
Контрольные вопросы 502
Упражнения 503

День 16. Потоки 505
Знакомство с потоками 505
Инкапсуляция 505
Буферизация 506
Потоки и буферы 509
Стандартные объекты ввода-вывода 509
Переадресация 509
Вывод данных с помощью cin 510
Строки 511
Проблемы, возникающие при вводе строк 512
Оператор » возвращает ссылку на объект istream 514
Другие методы объекта cin 515
Ввод одного символа 515
Ввод строк со стандартного устройства ввода 517
Вывод данных с помощью cout 522
Очистка буфера вывода 522
Функции-члены объекта cout 522
Манипуляторы, флаги и команды форматирования 524
Использование функции cout.width() 524
Установка символов заполнения 525
Установка флагов 526
Сравнение потоков и функции printf() 528
Использование файлов для ввода и вывода данных 531
Объекты ofstream 531
Состояния условий 532
Открытие файлов для ввода-вывода 532
Настройка открытия файла объектом ofstream 533
Двоичные и текстовые файлы 536
Установка параметров ввода-вывода с помощью командной строки 538
Резюме 541
Вопросы и ответы 541
Коллоквиум 542
Контрольные вопросы 542
Упражнения 543

День 17. Пространства имен 544
Введение 544
Вызов по имени функций и классов 545
Создание пространства имени 548
Объявление и определение типов 549
Объявление функций за пределами пространства имени 550
Добавление новых членов 550
Вложения пространств имен 550
Использование пространств имен 551
Ключевое слово using 553
Использование using как оператора 553
Использование using в объявлениях 555
Псевдонимы пространства имен 557
Неименованные пространства имен 557
Стандартное пространство имен std 558
Резюме 559
Вопросы и ответы 560
Контрольные вопросы 560
Упражнения 560

День 18. Анализ и проектирование объектно-ориентированных программ 561
Является ли C++ объектно-ориентированным языком программирования 561
Построение моделей 562
Проектирование программ: язык моделирования 563
Процесс проектирования программ 565
Идея 566
Анализ требований 567
Ситуации использования 567
Определение пользователей 568
Определение первой ситуации использования 569
Создание модели домена 570
Разработка сценариев 573
Разработка путеводителей 574
Анализ совместимости приложения 576
Анализ существующих систем 577
Прочая документация 577
Визуализация 578
Артефакты 578
Проектирование 579
Что такое классы 579
Преобразования 581
Другие преобразования 581
Статическая модель 582
Карточки CRC 583
Отношения между классами 585
Динамическая модель 589
Диаграммы переходов состояний 592
Резюме 594
Вопросы и ответы 594
Коллоквиум 595
Контрольные вопросы 595
Упражнения 595

День 19. Шаблоны 596
Что такое шаблоны 596
Параметризованные типы 597
Создание экземпляра шаблона 597
Объявление шаблона 597
Использование имени шаблона 599
Выполнение шаблона 599
Функции шаблона 602
Шаблоны и друзья 603
Дружественные классы и функции, не являющиеся шаблонами 603
Дружественный класс или функция как общий шаблон 607
Использование экземпляров шаблона 610
Специализированные функции 615
Статические члены и шаблоны 620
Стандартная библиотека шаблонов 624
Контейнеры 624
Последовательные контейнеры 625
Вектор 625
Список 631
Контейнер двухсторонней очереди 633
Стеки 633
Очередь 634
Ассоциативные контейнеры 634
Карта 634
Другие ассоциативные контейнеры 637
Классы алгоритмов 63 8
Операции, не изменяющие последовательность 639
Алгоритмы изменения последовательности 640
Резюме 641
Вопросы и ответы 641
Коллоквиум 642
Контрольные вопросы 642
Упражнения 642

День 20. Отслеживание исключительных ситуаций и ошибок 644
Ошибки, погрешности, ляпсусы и «гнилой» код 644
Исключительные ситуации 645
Несколько слов о «гнилом» коде 646
Исключения 646
Как используются исключения 647
Использование блоков try и catch 652
Перехват исключений 652
Использование нескольких операторов catch 652
Наследование исключений 655
Данные в классах исключений и присвоение имен объектам исключений 658
Исключения и шаблоны 665
Исключения без ошибок 668
Ошибки и отладка программы 668
Точки останова 669
Анализ значений переменных 669
Исследование памяти 669
Код ассемблера 669
Резюме 670
Вопросы и ответы 670
Коллоквиум 671
Контрольные вопросы 671
Упражнения 671

День 21. Что дальше 673
Препроцессор и компилятор 673
Просмотр промежуточного файла 674
Использование директивы #defme 674
Использование директивы #define для создания констант 674
Использование директивы #define для тестирования 674
Команда препроцессора #else 675
Включение файлов и предупреждение ошибок включения 676
Макросы 678
Зачем нужны все эти круглые скобки 678
Макросы в сравнении с функциями шаблонов 680
Подставляемые функции 680
Операции со строками 682
Оператор взятия в кавычки 682
Конкатенация 682
Встроенные макросы 683
Макрос assert() 683
Отладка программы с помощью макроса assert() 685
Макрос assert() вместо исключений 685
Побочные эффекты 686
Инварианты класса 686
Печать промежуточных значений 691
Уровни отладки 693
Операции с битами данных 699
Оператор И (AND) 699
Оператор ИЛИ (OR) 699
Оператор исключающего ИЛИ (OR) 700
Оператор дополнения до единицы 700
Установка битов 700
Сброс битов 700
Инверсия битов 701
Битовые поля 701
Стиль программирования 704
Отступы 704
Фигурные скобки 705
Длинные строки 705
Конструкции с оператором switch 705
Текст программы 706
Имена идентификаторов 706
Правописание и использование прописных букв в именах 707
Комментарии 707
Организация доступа к данным и методам 708
Определения классов 708
Включение файлов 708
Макрос assert() 709
Ключевое слово const 709
Сделаем еще один шаг вперед 709
Где получить справочную информацию и советы 709
Журналы 710
Выскажите свое мнение о книге 710
Резюме 710
Вопросы и ответы 711
Контрольные вопросы 712

Упражнения 712
Приложение А. Приоритеты операторов 725
Приложение Б. Ключевые слова C++ 727
Приложение В. Двоичные и шестнадцатеричные числа 728
Приложение Г. Ответы 736
Предметный указатель 807

Скачать книгу бесплатно8,57 мб. djvu

Учебный курс C++.

Д. Либерти, Д. Хорват «Освой самостоятельно C++ за 24 часа» Вильямс, 2007 год, 448 стр. (5,33 мб. djvu + CD 96,5 кб.)

Издание предназначено для самостоятельного изучения программирования на языке C+ с нуля. Книга рассчитана на 24 занятия по одному часу каждое (По мнению автора этого достаточно для базовой программы). Вы изучите основные фундаментальные концепции: управление вводом и выводом, циклы, массивы, объектно-ориентированное программирование и шаблоны, а также научится создавать приложения на языке C+. Занятия структурированы и снабжены примерами кода, для наглядной иллюстрации. Примеры синтаксиса выделены для удобства читателя. В каждой главе представлена группа контрольных упражнений и вопросов с ответами. Материал книги рассчитан на читателя начинающего изучать язык C+с нуля.
ISBN 978-5-8459-0949-7 (рус.)

Оглавление книги
ЧАСТЬ I. ВВЕДЕНИЕ В C++ 21

ЧАС 1. Первые шаги 22
Подготовка к программированию 22
Несколько уточнений по поводу C++, ANSI C++, ISO C++ и Windows 23
Установка и настройка компилятора 24
Установка с прилагаемого CD 24
Настройка компилятора Borland C++BuilderX 25
Компиляция при помоши компилятора C++BuilderX 26
Компилятор и редактор кода 27
Компиляция и компоновка исходного кода 28
Компиляция в интегрированной среде разработки 28
Компоновка программы 28
Цикл разработки 29
Hello.cpp — первая программа на языке C++ 29
Ошибки компиляции 32
Вопросы и ответы 33
Коллоквиум 33
Контрольные вопросы 34
Упражнения 34
Ответы на контрольные вопросы 34

ЧАС 2. Структура программы на языке C++ 35
Почему язык C++ является правильным выбором 35
Процедурное, структурное и объектно-ориентированное программирование 36
Язык C++ и объектно-ориентированное программирование 37
Элементы простой программы 38
Директива #include 39
Построчный анализ 40
Комментарии 41
Типы комментариев 41
Использование комментариев 41
Функции 42
Обращение к функции 42
Использование функций 43
Применение параметров функции 44
Вопросы и ответы 45
Коллоквиум 45
Контрольные вопросы 45
Упражнения 45
Ответы на контрольные вопросы 46

ЧАС 3. Переменные и константы 47
Что такое переменная? 47
Резервирование памяти 48
Размер целых чисел 48
Типы signed и unsigned 49
Основные типы переменных 50
Определение переменной 50
Чувствительность к регистру 51
Ключевые слова 51
Создание нескольких переменных одновременно 52
Присвоение значений переменным 52
Ключевое слово typedef 53
В каких случаях использовать тип short, а в каких — long? 54
Переполнение регистра беззнаковой переменной 55
Переполнение регистра знаковой переменной 56
Константы 56
Литеральные константы 57
Символьные константы 57
Перечисляемые константы 58
Вопросы и ответы 58
Коллоквиум 59
Контрольные вопросы 59
Упражнения 59
Ответы на контрольные вопросы 59

ЧАС 4. Выражения и операторы 60
Операторы 60
Непечатаемые символы 60
Блоки кода и составные операторы 61
Выражения 61
Операторы 62
Оператор присвоения 63
Математические операторы 63
Объединение операторов присвоения и математических операторов 64
Операторы инкремента и декремента 64
Префиксные и постфиксные операторы 65
Приоритет 66
Вложение круглых скобок в сложных выражениях 67
Операторы отношения 68
Условный оператор If 69
Ключевое слово else 69
Усложнение оператора if 71
Использование фигурных скобок для вложенных операторов if 72
Подробнее о логических операторах 75
Логический оператор AND 75
Логический оператор OR 75
Логический оператор NOT 75
Приоритет операторов отношения 76
Подробнее об истине и лжи 76
Вопросы и ответы 77
Коллоквиум 77
Контрольные вопросы 77
Упражнения 78
Ответы на контрольные вопросы 78

ЧАС 5. Функции 79
Что такое функция? 79
Объявление и определение функций 79
Объявление функции 80
Определение функции 82
Коротко об определении функций 82
Использование переменных в функциях 83
Локальные переменные 83
Глобальные переменные 86
Аргументы функций 86
Использование функций как параметров 86
Параметры — это также локальные переменные 87
1ВоЛращение значений из функций 88
Значения параметров, используемые по умолчанию 90
Перегрузка функций 92
Встраиваемые функции 93
Стек и функции 95
Вопросы и ответы 96
Коллоквиум 98
Контрольные вопросы 98
Упражнения 98
Ответы на контрольные вопросы 98

ЧАС 6. Ветвление процесса выполнения программ 99
Циклы 99
Оператор goto 99
Почему следует избегать использования оператора goto? 99
Оператор цикла while 100
Более сложный оператор while 100
Операторы break и continue 102
Цикл while () 104
Оператор цикла do..while 105
Оператор цикла for 107
Инициализация, условие и приращение 108
Более сложные операторы for 109
Пустой цикл for III
Вложенные циклы 112
Оператор switch 113
Вопросы и ответы 115
Коллоквиум 115
Контрольные вопросы 115
Упражнения 116
Ответы на контрольные вопросы 116

ЧАСТЬ II. КЛАССЫ 117

ЧАС 7. Простые классы 118
Что такое тип 118
Создание новых типов 119
Классы и их члены 119
Объявление класса 120
Соглашения об именовании классов 120
Определение объекта 121
Классы и объекты 121
Доступ к членам класса 121
Закрытые и открытые члены класса 122
Реализация методов класса 123
Конструкторы и деструкторы, или создание и удаление объектов 126
Стандартные конструкторы 126
Конструктор, предоставляемый компилятором 126
Вопросы и ответы 129
Коллоквиум 129
Контрольные вопросы 129
Упражнения 129
Ответы на контрольные вопросы 130

ЧАС 8. Подробнее о классах 131
Постоянные функции-члены 131
Интерфейс и реализация 132
Где объявлять класс и располагать реализацию методов 132
Встраиваемая реализация 133
Классы, содержащие другие классы как данные-члены 135
Вопросы и ответы 140
Коллоквиум 140
Контрольные вопросы 140
Упражнения 140
Ответы на контрольные вопросы 141

ЧАСТЬ III. УПРАВЛЕНИЕ ПАМЯТЬЮ 143

ЧАС 9. Указатели 144
Указатели и их назначение 144
Сохранение адреса в указателе 147
Имена указателей 148
Оператор косвенного доступа 148
Указатели, адреса и переменные 149
Манипулирование данными при помощи указателей 150
Адреса 151
Для чего нужны указатели? 153
Стек и динамически распределяемая память 153
Ключевое слово new 154
Ключевое слово delete 155
Утечка памяти 157
Вопросы и ответы 158
Коллоквиум 158
Контрольные вопросы 158
Упражнения 159
Ответы на контрольные вопросы 159

ЧАС 10. Подробнее об указателях 160
Создание объектов в динамической памяти 160
Удаление объектов 160
Доступ к переменным-членам при помощи указателя 162
Данные-члены в динамической памяти 163
Указатель this I64
Паразитные, дикие и зависшие указатели I66
Постоянные указали 166
Константы как указатели и как функции-члены I67
Постоянный указатель this I69
Вопросы и ответы 169
Коллоквиум I69
Контрольные вопросы I69
Упражнения 169
Ответы на контрольные вопросы 170

ЧАС 11. Ссылки 171
Что такое ссылка? 171
Создание ссылок 171
Использование в ссылках оператора обращения к адресу (&) 173
На что можно ссылаться? 175
Нулевые указатели и ссылки 176
Передача функции аргументов по ссылке 176
Вариант функции swap() для работы с указателями 177
Реализация функции swap() для работы со ссылками 179
Понятие заголовка и прототипа функции 180
Возвращение нескольких-значеиий 180
Возвращение значений по ссылке 182
Вопросы и ответы 183
Коллоквиум 183
Контрольные вопросы 184
Упражнения 184
Ответы на контрольные вопросы 184

ЧАС 12. Подробнее о ссылках и указателях 185
Передача ссылок как средство повышения эффективности 185
Передача постоянного указателя 188
Ссылки как альтернатива указателям 190
Когда использовать ссылки, а когда — указатели 192
Не возвращайте ссылку на объект, находящийся вне области видимости! 192
Возвращение ссылки на объект в динамической памяти 194
Кто владеет указателем? 196
Вопросы и ответы 197
Коллоквиум 197
Контрольные вопросы 197
Упражнения 197
Ответы на контрольные вопросы 197

ЧАСТЬ IV. ДОПОЛНИТЕЛЬНЫЕ СРЕДСТВА 199

ЧАС 13. Дополнительные возможности функций 200
Перегрузка функций-членов 200
Использование значений по умолчанию 202
Выбор между значениями по умолчанию и перегруженными функциями 204
Перегрузка конструкторов 204
Инициализация объектов 205
Конструктор копий 205
Вопросы и ответы 209
Содержание 11
Коллоквиум 209
Контрольные вопросы 210
Упражнения 210
Ответы на контрольные вопросы 210

ЧАС 14. Перегрузка операторов 211
Перегрузка операторов 211
Создание функции инкремента 212
Перегрузка постфиксных операторов 213
Различие между префиксом и постфиксом 213
Оператор суммы 215
Перегрузка оператора суммы operator+ 217
Ограничения на перегрузку операторов 218
Что можно перегружать 218
Оператор присвоения 219
Преобразование типов данных 221
Оператор int() 223
Вопросы и ответы 224
Коллоквиум 224
Контрольные вопросы 225
Упражнения 225
Ответы на контрольные вопросы 225

ЧАС 15. Массивы 226
Что такое массив? 226
Доступ к элементам массива 226
Запись данных за пределами массива 228
О истока последнего столба 228
Инициализация массивов 228
Массивы объектов 229
Многомерные массивы 230
Инициализация многомерных массивов 231
Немного о памяти 233
Массивы указателей 233
Объявление массивов в области динамической памяти 234
Указатель на массив и массив у копателей 235
Имена массивов и указателей 235
Удаление массивов из динамической памяти 237
Массивы символов 238
Функции strcpy() и stmcpy() 239
Строковые классы 241
Вопросы и ответы 241
Коллоквиум 242
Контрольные вопросы 242
Упражнения 242
Ответы на контрольные вопросы 242

ЧАСТЬ V. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ 243

ЧАС 16. Наследование 244
Что такое наследование? 244
Наследование и происхождение 245
В мире животных 246
Синтаксис происхождения классов 246
Закрытый или защищенный? 248
Конструкторы и деструкторы 250
Передача аргументов в базовые конструкторы 252
Переопределение функций 256
Перегрузка или переопределение? 258
Сокрытие метода базового класса 258
Вызов базового метода 259
Вопросы и ответы 261
Коллоквиум 261
Контрольные вопросы 261
Упражнения 261
Ответы на контрольные вопросы 262

ЧАС 17. Полиморфизм и производные классы 263
Реализация полиморфизма при помощи виртуальных методов 263
Как работают виртуальные функции 267
Попытка доступа к методам из базового класса 268
Отсечение 268
Виртуальные деструкторы 270
Виртуальные конструкторы копий 271
Цена виртуальных методов 274
Вопросы и ответы 274
Коллоквиум 274
Контрольные вопросы 274
Упражнения 275
Ответы на контрольные вопросы 275

ЧАС 18. Расширенное наследование 276
Проблемы одиночного наследования 276
Абстрактные типы данных 280
Чистые виртуальные функции 283
Реализация чистых виртуальных функций 286
Сложная иерархия абстракций 289
Какие классы являются абстрактными? 293
Вопросы и ответы 293
Коллоквиум 294
Контрольные вопросы 294
Упражнения 294
Ответы на контрольные вопросы 294

ЧАС 19. Связанные списки 295
Связанные списки и другие структуры 295
Применение связанных списков 296
Делегирование ответственности 296
Компоненты связанных списков 297
Так что же из этого следует? 304
Вопросы и ответы 305
Коллоквиум 305
Контрольные вопросы 305
Упражнения 306
Ответы на контрольные вопросы 306

ЧАСТЬ VI. СПЕЦИАЛЬНЫЕ ТЕМЫ 307

ЧАС 20. Специальные классы, функции и указатели 308
Статические данные-члены 308
Статические функции-члены 310
Содержание 13
Объединение классов 312
Доступ к членам вложенного класса 317
Контроль доступа к вложенным членам 317
Цена объединения 318
Копирование при передаче по значению или передача по ссылке 318
Дружественные классы 318
Дружественные функции 319
Указатели на функции 319
Упрошенный вызов 321
Массивы указателей на функции 322
Передача указателей на функции другим функциям 324
Использование ключевого слова typedef с указателями на функции 326
Указатели на функции-члены 329
Массивы указателей на функции-члены 331
Вопросы и ответы 333
Коллоквиум 334
Контрольные вопросы 334
Упражнения 334
Ответы на контрольные вопросы 334

ЧАС 21. Препроцессор 335
Препроцессор и компилятор 335
Просмотр промежуточного файла 335
Использование директивы #define 335
Использование директивы #define для констант 336
Использование директив #define и #ifdef для проверки 336
Директива препроцессора #else 337
Подключение файлов и предупреждение ошибок подключения 338
Определение в командной строке 339
Директива #undef 339
Условная компиляция 339
Макрофункции 339
Зачем столько круглых скобок? 340
Функции, шаблоны или макросы? 341
Операции со строками 342
Оператор взятия в кавычки 342
Конкатенация 342
Встроенные макросы 343
Макрос assert ()343
Вопросы и ответы 357
Коллоквиум 357
Контрольные вопросы 357
Упражнения 358
Ответы на контрольные вопросы 358

ЧАС 22. Объектно-ориентированный анализ и проектирование 359
Цикл разработки 359
Моделирование системы сигнализации 360
Концептуализация 360
Анализ и требования 360
Низкоуровневое и высокоуровневое проектирование 361
Другие объекты 362
Какие классы нужны? 362
Как передается сигнал тревоги? 363
Цикл событий 363
Проект системы Post Master 365
Дважды отмерь, один раз отрежь 366
Разделяй и властвуй 366
Формат сообщений 367
Предварительное проектирование классов 367
Корневые и некорневые иерархии 368
Проектирование интерфейсов 370
Создание прототипа 371
Правило 80/80 371
Разработка класса PostMasterMessage 372
Интерфейс прикладных программ 372
Программирование в больших группах 373
Продолжение проекта 374
Работа с управляющей программой 375
Вопросы и ответы 381
Коллоквиум 381
Контрольные вопросы 381
Упражнения 382
Ответы на кбнтрольные вопросы 382

ЧАС 23. Шаблоны 383
Что такое шаблоны? 383
Экземпляры шаблона 384
Определение шаблона 384
Использование- экземпляров шаблона 390
Стандартная библиотека шаблонов 396
Вопросы и ответы 397
Коллоквиум 397
Контрольные вопросы 397
Упражнения 397
Ответы на контрольные вопросы 398

ЧАС 24. Исключения, обработка ошибок и другое 399
Ошибки, недоработки и просчеты 399
Реакция на непредвиденное 400
Исключения 400
Применение исключений 401
Применение блоков try и catch 405
Обработка исключений 405
Применение нескольких обработчиков catch 406
Обработка по ссылке и полиморфизм 406
Стиль программирования 410
Фигурные скобки 410
Длинные скобки 411
Операторы switch 411
Текст программы 411
Имена идентификаторов 412
Правописание и регистр символов имен 412
Комментарии 413
Доступ 413
Определения классов 414
Подключение файлов 414
Макрос assert() 414
Ключевое слово const 414
Содержание
Следующие шаги
Куда обратиться за помощью и консультацией?
Рекомендованная литература Вопросы и ответы
Коллоквиум
Контрольные вопросы Упражнения
Ответы на контрольные вопросы

ЧАСТЬ VII. ПРИЛОЖЕНИЯ

Приложение А. Двоичные и шестнадцатеричные числа
Другие системы счисления
Еще об основаниях
Двоичная система счисления
Почему именно основание 2?
Биты, байты и полубайты
Что такое килобайт?
Двоичные числа Шестнадцатеричная система счисления

Приложение Б. Глоссарий
Предметный указатель

 

Скачать книгу бесплатно5,33 мб. djvu

 

Скачать CD бесплатно96,5 кб.

Справочное руководство.

Джесс Либерти «C++. Энциклопедия пользователя» DiaSoft, 2001 год, 581 стр. (9,94 мб. djvu)

Энциклопедия пользователя станет полезной книгой для изучающего язык C+с нуля. В книге содержится обзор основных тем и вопросов возникающих при программировании на С++. В энциклопедии рассмотрены вопросы объектно — ориентированного анализа и программирования, универсального языка программирования UML и разработки объектных моделей. Основной акцент сделан на вопросах реализации приложений, а также стандартнаой библиотеки шаблонов STL. Рассказано о обработке данных, живучести объектов и шифрованию, архитектуре CORBA и модели COM. Книга будет полезна читателям, которые имеют начальные знания, или только изучают программирование на языке С++.

Оглавление книги
Часть I. Объектно-ориентированное программирование

Глава 1. Объектно-ориентированный анализ и проектирование
Построение моделей
Разработка программ: язык моделирования
Разработка программ: процессы
Замысел
Анализ требований
Примеры использования
Анализ приложения
Анализ систем
Планирование выпуска документов
Иллюстративный материал
Артефакты
Проектирование
Что такое классы
Преобразования
Статическая модель
Динамическая модель
Резюме

Глава 2. Проектирование классов в C++
Перевод диаграмм классов в C++
Стандартные классы
Шаблонные классы
Служебные классы
Ассоциации
Агрегации
Обобщение
Перевод диаграмм взаимодействия в C++
Реализация диаграмм совместных работ и диаграмм последовательности
50 действий в C++
Перевод диаграмм состояний в C++
Перевод диаграмм активности в C++
Резюме

Глава 3. Наследование, полиморфизм и повторное использование
программных кодов Преимущества наследования
Объектно-ориентированные связанные списки
Разработка связанного списка
Реализация связанного списка
Абстрактные классы
Перекрытие чисто виртуальных методов
Виртуальные деструкторы
Полиморфизм, реализованный путем перегрузки методов класса
Управление памятью
Проблемы, сопровождающие перегрузку других операторов
Оператор присваивания
Перегрузка операторов увеличения
Виртуальный конструктор копий
Множественное наследование
Проблемы множественного наследования
Множественное наследование и включение
Резюме

Часть II. Вопросы реализации

Глава 4. Управление памятью
Управление памятью и указатели
Расход памяти
Распределение массивов
Паразитные, болтающиеся и дикие указатели
Указатели const
Указатели const и функции-члены const
Передача по ссылке
Передача указателя const
Возврат ссылки на объект, который не находится в области видимости
Указатель, указатель, указатель
Указатели и исключения
Использование автоуказателей
Подсчет ссылок
Резюме

Глава 5. Использование каркасов приложений
Microsoft Foundation Classes
Приступая к изучению
Другие мастера
В перспективе
Архитектура приложения
Многопоточность
Кооперативная многопоточность против вытесняющей
Проблемы вытесняющей многопоточности
Пример для изучения
Создание потоков
Пример
Служебные классы
Классы манипулирования строками
Классы времени
Документы и представления
Представления
Резюме

Глава 6. Контейнерные классы библиотеки STL
Определение и реализация шаблонов
Определение и реализация шаблонов функций
Определение и реализация шаблонов классов
Последовательные контейнеры
Контейнер-вектор
Контейнер-список
Контейнер-дека
Стеки
Очереди
Приоритетные очереди
Связанные контейнеры
Контейнер-запись
Множественные записи
Контейнер-набор
Множественные наборы
Вопросы производительности
Использование стандартной библиотеки C++
Конструирование типов элементов
Резюме

Глава 7. Итераторы и алгоритмы STL
Классы итераторов
Позиция внутри контейнера
Типы итераторов контейнеров
Базовый класс итераторов
Вводные итераторы
Выводные итераторы
Пересылаемые итераторы
Двунаправленные итераторы
Итераторы произвольного доступа
Итераторные операции
Классы стандартных итераторов
Объекты-функции
Предикаты
Арифметические функции
Алгоритмы STL
Операции немутирующих последовательностей
Алгоритмы мутирующих последовательностей
Операции сортировки и связности последовательностей
Стандартные функции
Резюме

Глава 8. Исключение конфликтов имен
Функции и классы, разрешаемые по именам
Создание пространства имен
Использование пространства имен
Ключевое слово using
Объявление using
Псевдоним пространства имен
Неименованное пространство имен
Стандартное пространство имен
Резюме

Глава 9. Манипулирование типами объектов
Оператор typeid()
Класс typeinfo
Конструктор для класса type_info
Операторы сравнения
Функция-член name()
Функция-член before()
Оператор typeid() в конструкторах и деструкторах
Неправильное использование typeid()
Динамическое приведение объектов
Оператор dynamic_cast()
Операторы typeid() и dynamic_cast
Другие операторы приведения
Оператор static_cast()
Оператор reinterpret_cast()
Когда использовать операторы dynamic_cast(), static_cast() или
reinterpretcast()
Оператор const_cast()
Новые приведения против старых
Резюме

Глава 10. Настройка производительности приложения
Функции inline вне определений классов
Как избежать раскрытия программного кода реализации в распространяемых header-файлах
Анализ стоимости виртуальных функций и виртуальных базовых классов
Виртуальные функции
Виртуальные базовые классы
Компромиссы RTTI
Управление памятью для временных объектов
Резюме

Часть III. Обработка данных

Глава 11. Рекурсия и рекурсивные структуры данных
Что такое рекурсия
Числа Фибоначчи: рекурсивное определение
Остановка рекурсии
Рекурсивные структуры
Обход рекурсивной структуры с помощью рекурсивной функции
Цикл и хвостовая рекурсия
Хвостовая рекурсия
Непрямая рекурсия
Рекурсия и стек
Отладка рекурсивных функций
Резюме

Глава 12. Использование методов сортировки
Анализ производительности алгоритмов
Сравнение среднего, худшего и лучшего случаев
Стабильностьсортировки
Использование дополнительных способов хранения во время сортировки
Пузырьковая сортировка
Анализ пузырьковой сортировки
Сортировка вставками
Анализ сортировки вставками
Сортировка выбором
Анализ сортировки выбором
Быстрая сортировка
Анализ быстрой сортировки
Сортировка слиянием
Анализ сортировки слиянием
Сортировка по методу Шелла
Анализ сортировки по методу Шелла
Пирамидальная сортировка
Анализ пирамидальной сортировки
Выбор метода сортировки
Генерирование тестовых данных
Резюме

Глава 13. Алгоритмы поиска данных
Линейный поиск
Анализ линейного поиска
Поиск в отсортированном массиве
Сопоставление с образцом
Грубый алгоритм
Представление образца
Построение конечных автоматов
Алгоритмы поиска на графе
Поиск в глубину
Поиск в ширину
Сравнение поиска в глубину и поиска в ширину
Поиск по первому наилучшему совпадению
Реализация объектов графов
Представление игры Тic-Тac-Тoe
Применение альфа-бета-отсечений
Задача коммивояжера
Внешний поиск
Индексированный последовательный доступ
Двоичные деревья
Деревья 2-3-4
Резюме 4

Глава 14. Хеширование и синтаксический анализ
Сравнение поиска и хеширования
Функции хеширования
Разрешение конфликтов
Линейное повторное хеширование
Нелинейное повторное хеширование
Коэффициент загрузки(альфа)
Связывание в цепочку
Адресация областей памяти
Синтаксический разбор
Синтаксический разбор числовых выражений
Синтаксический разбор строковых выражений
Контекстно-свободная грамматика и синтаксический анализ
Выполнение нисходящего синтаксического разбора для проверки
правильности регулярных выражений Резюме

Часть IV. Живучесть объектов и шифрование

Глава 15. Живучесть объектов
Создание хранимых объектов
Что такое B-дерево
Запись B-дерева на диск
Кэширование
Определение размера страниц
Определение количества страниц, которые могут одновременно
находиться в памяти Подкачка данных на жесткий диск
Реализация B-дерева
Как это работает
Прогулка по программному коду
Поиск
Резюме

Глава 16. Реляционные базы данных и живучесть
Основные концепции реляционных баз данных
Архитектура реляционной базы данных
Ограничения и соображения
Язык структурированных запросов SQL
Нормирование
Соединения
Живучесть для реляционной базы данных
Перемещения с идентификаторами объектов
Использование пятен
Скрытие деталей
Непосредственное сохранение объектов
Использование API БД
Доступ к источникам данных ODBC
Использование MFC
Операторы
Установка характеристик БД
Резюме

Глава 17. Реализация живучести объектов с помощью реляционных баз данных
Объекты в Oracle 8
Типы объектов
Ссылки на объекты
Коллекции
Использование внешних процедур, разработанных на языке С++
Отображение UML-диаграмм на объектно-реляционную базу данных
Проектирование базы данных
Генерирование классов на С++
Генерирование сервера
Пример: Система заказа покупок
Описание системы

Глава 18. Объектно-ориентированные базы данных
Обзор объектно-ориентированных баз данных
Стандарт ODMG
Приложение на С++ для ведения счетов
Живучесть данных
Схемы базы данных и средства захвата этой схемы
Коллекции
Итераторы
Отношения
Базы данных и транзакции
Технические вопросы объектно-ориентированных баз данных
Архитектура клиент/сервер
Хранение данных и кластеризация объектов
Передача данных
Блокирование данных
Резюме

Глава 19. Защита приложений с помощью шифрования
Краткая история шифрования
Роль Национального бюро стандартов
Понятие шифрования
Коды
Шифры
Шифр Vemam
Криптография по частному ключу
Алгоритмы частного ключа
Механизмы шифрования по секретному ключу
Использование центров распространения ключей
Криптография по общему ключу
Метод головоломки Ральфа Меркле
Многопользовательские криптографические методы Диффи
Хельмана
Метод RSA
Использование Pretty Good Privacy
Выбор простых чисел в PGP
Использование случайных чисел в криптографии
Шифрование файлов с помощью PGP
Ограничения в криптографии
Юридические ограничения на криптографию
Криптографические атаки
Атака грубой силы
Криптоанализ
Взлом файла, зашифрованного программой PGP
Цифровые подписи
Public Key Cryptography Standard(PKCS)
Digital Signature Standard(DSS)
Неотрицание
Коммерческие криптографические продукты
Безопасные Web-клиенты
Безопасные почтовые клиенты
Продукты для защиты рабочего стола
Резюме

Часть V. Распределенные вычисления

Глава 20. CORBA
Теория и обоснование
Минимальная среда CORBА
Каркас объектной технологии
ПОР: объектное склеивание
Компонентная модель
IDL: соглашение связывания
Сравнение IDL с определением класса C++
Брокер объектных запросов
Время жизни объектов
Среды разработки
Сравнение сред CORBA
Способность ORB к взаимодействию
Создание клиента С+
Генерирование заглушки
Связь с ORB
Вызовы методов
Завершенное клиентское приложение C++
Создание сервера C++
Генерирование скелета
Реализация методов сервера
Подсоединение класса сервера
Загрузка ВОА в ORB
Клиент Java
Г енерирование заглушки
Запуск и программный код вызова метода
Стратеги и тестирования
Трассировка
Службы мониторинга и регистрации
Обработка исключений
Удаленная отладка
Служба имен и способность к взаимодействию
Interoperable Object Reference (IOR)
Именование контекстов
Проблемы взаимодействия
Производительность
Перерасход памяти со стороны ORB
Степень детализации интерфейса
Ссылки на передаваемый объект
Резюме

Глава 21. COM
Основы COM
Архитектура COM
Интерфейсы
Интерфейс IUnknown
COM-объекты
Библиотеки типов
Другие COM-технологии
Использование COM-объектов в C++
Использование интерфейсов Raw
Использование интеллектуальных указателей
Использование библиотек типов
Создание
COM-объектов в C++
Множественное наследование
Вложенные классы
Использование классов tear off
Резюме
Дополнительная литература

Глава 22. Java и C++
Общие черты C++ и Java
Комментарии
Типы данных
Операторы
Операторы управления потоком
Различия между C++ и Java
Управление памятью
Отсутствие указателей
Отсутствие препроцессора
Отсутствие деструктора
Спецификаторы доступа
Параметры метода
Внешние функции
Перечислители
Строки Массивы
Объектно-ориентированные возможности Java
Классы
Наследование
Множественное наследование
Обработка исключений
Резюме

Скачать книгу бесплатно9,94 мб. djvu

 

Похожая литература