ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 1) онлайн
Содержание
Предисловие 24
Введение 25
Новые концепции программирования 25
Объектно-ориентированное программирование 25
Унифицированный язык моделирования 26
Языки и платформы разработки 26
Для чего нужна эта книга 27
Новые концепции 27
Последовательность изложения материала 27
Знания, необходимые для чтения этой книги 28
Техническое и программное обеспечение 28
Консольные программы 28
Исходные тексты программ 28
Упражнения 29
Проще, чем кажется 29
Преподавателям 29
Стандартный C++ 29
Унифицированный язык моделирования (UML) 29
Средства разработки программного обеспечения 30
Различия между C и C++ 30
Оптимальный порядок изучения ООП 30
Нововведения в C++ 31
Избыточные возможности 31
Упражнения 31
От издательства 31
Глава 1. Общие сведения 32
Для чего нужно объектно-ориентированное программирование? 32
Процедурные языки 32
Деление на функции 33
Недостатки структурного программирования 33
Неконтролируемый доступ к данным 34
Моделирование реального мира 35
Объектно-ориентированный подход 36
Аналогия 37
ООП: подход к организации программы 38
Характеристики объектно-ориентированных языков 38
Объекты 38
Классы 39
Наследование 40
Повторное использование кода 42
Пользовательские типы данных 42
Полиморфизм и перегрузка 42
С++и С 43
Изучение основ 44
Универсальный язык моделирования (UML) 44
Резюме 45
Вопросы 46
Глава 2. Основы программирования на C++ 48
Что необходимо для работы 49
Структура программы 49
Функции 49
Операторы 51
Разделяющие знаки 51
Вывод с использованием cout 52
Строковые константы 53
Директивы 53
Директивы препроцессора 54
Заголовочные файлы 54
Директива using 55
Комментарии 55
Синтаксис комментариев 55
Использование комментариев 56
Альтернативный вид комментариев 56
Переменные целого типа 56
Описание переменных целого типа 57
Объявление и определение переменной 58
Имена переменных 59
Операция присваивания 59
Целые константы 59
Оператор вывода 60
Манипулятор endl 60
Другие целые типы 61
Символьные переменные 61
Символьные константы 62
Инициализация 63
Управляющие последовательности 63
Ввод с помощью cin 64
Определение переменных при первом использовании 65
Каскадирование операции << 66
Выражения 66
Приоритеты выполнения операций 66
Вещественные типы 67
Тип float 67
Типы double и long double 68
Вещественные константы 68
Префикс const 69
Директива #define 70
Тип bool 70
Манипулятор setw 71
Каскадирование операции << 72
Множественное определение 72
Файл заголовка IOMANIP 73
Таблица типов переменных 73
Беззнаковые типы данных 73
Преобразования типов 75
Неявные преобразования типов 75
Явные преобразования типов 77
Арифметические операции 78
Остаток от деления 79
Арифметические операции с присваиванием 79
Инкремент 81
Декремент 82
Библиотечные функции 82
Заголовочные файлы 83
Библиотечные файлы 84
Заголовочные и библиотечные файлы 84
Формы директивы #include 84
Резюме 85
Вопросы 87
Упражнения 88
Глава 3. Циклы и ветвления 92
Операции отношения 92
Циклы 94
Цикл for 94
Инициализирующее выражение 96
Условие выполнения цикла 96
Инкрементирующее выражение 96
Число выполнений цикла 97
Несколько операторов в теле цикла 97
Блоки и область видимости переменных 98
Форматирование и стиль оформления циклов 99
Обнаружение ошибок 100
Варианты цикла for 100
Определение счетчика цикла внутри оператора цикла for 101
Несколько инициализирующих выражений и условий цикла 101
Цикл while 102
Несколько операторов в цикле while 104
Приоритеты арифметических операций и операций отношения 105
Цикл do 106
Выбор типа цикла 108
Ветвления 108
Условный оператор if 109
Несколько операторов в теле if 110
if внутри циклов 110
Функция exit() 111
Оператор if...else 112
Функция getche() 113
Условия с присваиванием 114
Вложенные ветвления if...else 116
if и else во вложенных ветвлениях 117
Конструкция else...if 119
Оператор switch 119
Оператор break 121
switch и символьные переменные 122
Ключевое слово default 123
Сравнение switch и if...else 124
Условная операция 124
Логические операции 127
Операция логического И 127
Логическое ИЛИ 128
Логическое НЕ 129
Целые величины в качестве булевых 129
Приоритеты операций C++ 130
Другие операторы перехода 131
Оператор break 131
Расширенная таблица символов ASCII 133
Оператор continue 133
Оператор goto 134
Резюме 135
Вопросы 136
Упражнения 138
Глава 4. Структуры 142
Структуры 142
Простая структура 143
Определение структуры 143
Определение структурной переменной 144
Доступ к полям структуры 146
Другие возможности структур 146
Пример применения структур 148
Вложенные структуры 150
Пример карточной игры 154
Структуры и классы 156
Перечисления 156
Дни недели 157
Перечисления и программа подсчета числа слов 159
Пример карточной игры 161
Недостаток перечислений 162
Примеры перечисляемых типов 163
Резюме 163
Вопросы 164
Упражнения 165
Глава 5. Функции 168
Простые функции 169
Объявление функции 170
Вызов функции 171
Определение функции 171
Обычные и библиотечные функции 172
Отсутствие объявления 173
Передача аргументов в функцию 174
Передача констант в функцию 174
Передача значений переменных в функцию 175
Передача аргументов по значению 176
Структурные переменные в качестве аргументов 177
Имена переменных внутри прототипа функции 181
Значение, возвращаемое функцией 181
Оператор return 182
Исключение ненужных переменных 184
Структурная переменная в качестве возвращаемого значения 185
Ссылки на аргументы 186
Передача по ссылке аргументов стандартных типов 187
Усложненный вариант передачи по ссылке 189
Передача структурных переменных по ссылке 191
Замечание о ссылках 192
Перегруженные функции 192
Переменное число аргументов функции 193
Различные типы аргументов 195
Рекурсия 196
Встраиваемые функции 198
Аргументы по умолчанию 200
Область видимости и класс памяти 202
Локальные переменные 203
Глобальные переменные 205
Статические локальные переменные 207
Возвращение значения по ссылке 208
Вызов функции в качестве левого операнда операции присваивания 209
Зачем нужно возвращение по ссылке? 210
Константные аргументы функции 210
Резюме 212
Вопросы 213
Упражнения 215
Глава 6. Объекты и классы 217
Простой класс 217
Классы и объекты 218
Определение класса 219
Использование класса 222
Вызов методов класса 222
Объекты программы и объекты реального мира 224
Детали изделия в качестве объектов 224
Круги в качестве объектов 225
Класс как тип данных 226
Конструкторы 227
Пример со счетчиком 228
Графический пример 231
Объекты в качестве аргументов функций 232
Объекты в качестве аргументов 236
Конструктор копирования по умолчанию 237
Объекты, возвращаемые функцией 239
Аргументы и объекты 240
Пример карточной игры 242
Структуры и классы 244
Классы, объекты и память 245
Статические данные класса 247
Применение статических полей класса 247
Пример использования статических полей класса 247
Раздельное объявление и определение полей класса 248
const и классы 249
Константные методы 250
Константные объекты 252
Зачем нужны классы? 253
Резюме 254
Вопросы 255
Упражнения 257
Глава 7. Массивы и строки 261
Основы массивов 262
Определение массивов 263
Элементы массива 263
Доступ к элементам массива 263
Среднее арифметическое элементов массива 264
Инициализация массива 265
Многомерные массивы 267
Передача массивов в функции 271
Массивы структур 273
Массивы как члены классов 275
Массивы объектов 278
Массивы интервалов 278
Границы массива 280
Доступ к объектам в массиве 280
Массивы карт 281
Строки 284
Строковые переменные 285
Считывание нескольких строк 288
Копирование строк 289
Копирование строк более простым способом 290
Массивы строк 291
Строки как члены классов 292
Определенные пользователем типы строк 294
Стандартный класс string языка C++ 296
Определение объектов класса string и присваивание им значений 296
Ввод/вывод для объектов класса string 298
Поиск объектов класса string 299
Модификация объектов класса string 300
Сравнение объектов класса string 301
Доступ к символам в объектах класса string 302
Другие методы класса string 303
Резюме 304
Вопросы 304
Упражнения 307
Глава 8. Перегрузка операций 312
Перегрузка унарных операций 313
Ключевое слово operator 314
Аргументы операции 315
Значения, возвращаемые операцией 315
Временные безымянные объекты 317
Постфиксные операции 318
Перегрузка бинарных операций 320
Арифметические операции 320
Объединение строк 323
Множественная перегрузка 325
Операции сравнения 325
Операции арифметического присваивания 328
Операция индексации массива ([]) 330
Преобразование типов 334
Преобразования основных типов в основные типы 335
Преобразования объектов в основные типы и наоборот 336
Преобразования строк в объекты класса string и наоборот 338
Преобразования объектов классов в объекты других классов 340
Преобразования: когда что использовать 346
Диаграммы классов UML 346
Объединения 347
Направленность 347
«Подводные камни» перегрузки операций и преобразования типов 348
Использование похожих значений 348
Использование похожего синтаксиса 348
Показывайте ограничение 349
Избегайте неопределенности 349
Не все операции могут быть перегружены 349
Ключевые слова explicit и mutable 349
Предотвращение преобразования типов с помощью explicit 350
Изменение данных объекта, объявленных как const,
используя ключевое слово mutable 351
Резюме 353
Вопросы 353
Упражнения 356
Глава 9. Наследование 361
Базовый и производный классы 362
Определение производного класса 364
Обобщение в диаграммах классов в UML 364
Доступ к базовому классу 365
Результат программы COUNTEN 366
Спецификатор доступа protected 366
Недостатки использования спецификатора protected 368
Неизменность базового класса 368
Разнообразие терминов 368
Конструкторы производного класса 368
Перегрузка функций 370
Какой из методов использовать? 372
Операция разрешения и перегрузка функций 372
Наследование в классе Distance 373
Применение программы ENGLEN 374
Конструкторы класса DistSign 375
Методы класса DistSign 375
В поддержку наследования 375
Иерархия классов 376
Абстрактный базовый класс 379
Конструкторы и функции 380
Наследование и графика 380
Общее и частное наследование 383
Комбинации доступа 383
Выбор спецификатора доступа 384
Уровни наследования 385
Множественное наследование 388
Методы классов и множественное наследование 389
Частное наследование в программе EMPMULT 393
Конструкторы при множественном наследовании 393
Конструкторы без аргументов 396
Конструктор со многими аргументами 396
Неопределенность при множественном наследовании 397
Включение: классы в классах 398
Включение в программе EMPCONT 399
Композиция: сложное включение 403
Роль наследования при разработке программ 403
Резюме 404
Вопросы 405
Упражнения 407
Глава 10. Указатели 411
Адреса и указатели 412
Операция получения адреса & 412
Переменные указатели 414
Недостатки синтаксиса 416
Указатели должны иметь значение 416
Доступ к переменной по указателю 417
Указатель на void 420
Указатели и массивы 421
Указатели-константы и указатели-переменные 423
Указатели и функции 424
Передача простой переменной 424
Передача массивов 426
Сортировка элементов массива 428
Расстановка с использованием указателей 428
Сортировка методом пузырька 430
Указатели на строки 432
Указатели на строковые константы 432
Строки как аргументы функций 433
Копирование строк с использованием указателей 434
Библиотека строковых функций 434
Модификатор const и указатели 435
Массивы указателей на строки 436
Управление памятью: операции new и delete 437
Операция new 438
Операция delete 439
Класс String с использованием операции new 440
Указатели на объекты 442
Ссылки на члены класса 443
Другое применение операции new 444
Массив указателей на объекты 445
Действия программы 446
Доступ к методам класса 446
Связный список 447
Цепочка указателей 447
Добавление новых элементов в список 449
Получение содержимого списка 450
Классы, содержащие сами себя 450
Пополнение примера LINKLIST 451
Указатели на указатели 451
Сортируем указатели 453
Тип данных person** 454
Сравнение строк 454
Пример разбора строки 455
Разбор арифметических выражений . 456
Программа PARSE 457
Симулятор: лошадиные скачки 459
Разработка лошадиных скачек 460
Моделирование хода времени 463
Уничтожение массива указателей на объекты 463
Функция putch() 464
Диаграммы UML 464
Диаграмма состояний в UML 465
Состояния 466
Переходы 466
От состояния к состоянию 466
Отладка указателей 467
Резюме 467
Вопросы 469
Упражнения 471
Глава 11. Виртуальные функции 476
Виртуальные функции 476
Доступ к обычным методам через указатели 477
Доступ к виртуальным методам через указатели 479
Позднее связывание 481
Абстрактные классы и чистые виртуальные функции 481
Виртуальные функции и класс person 483
Виртуальные функции в графическом примере 485
Виртуальные деструкторы 488
Виртуальные базовые классы 489
Дружественные функции 491
Дружественные функции как мосты между классами 491
Ломая стены 492
Пример с английскими мерами длины 493
Дружественность и функциональная запись 496
Дружественные классы 499
Статические функции 500
Доступ к статическим функциям 501
Инициализация копирования и присваивания 502
Перегрузка оператора присваивания 503
Конструктор копирования 506
Объектные диаграммы UML 510
Эффективное использование памяти классом String 510
Указатель this 516
Доступ к компонентным данным через указатель this 517
Использование this для возврата значений 518
Исправленная программа STRIMEM 520
Динамическая информация о типах 523
Проверка типа класса с помощью dynamic_cast 523
Изменение типов указателей с помощью dynamic_cast 524
Оператор typeid 526
Резюме 527
Вопросы 528
Упражнения 531
Глава 12. Потоки и файлы 536
Потоковые классы 536
Преимущества потоков 537
Иерархия потоковых классов 537
Класс ios 539
Класс istream 542
Класс ostream 543
Классы iostream и _withassign 544
Предопределенные потоковые объекты 544
Ошибки потоков 545
Биты статуса ошибки 545
Ввод чисел 546
Переизбыток символов 547
Ввод при отсутствии данных 547
Ввод строк и символов 548
Отладка примера с английскими расстояниями 548
Потоковый ввод/вывод дисковых файлов 551
Форматированный файловый ввод/вывод 551
Строки с пробелами 554
Ввод/вывод символов 555
Двоичный ввод/вывод 557
Оператор reinterpret_cast 558
Закрытие файлов 558
Объектный ввод/вывод 559
Совместимость структур данных 560
Ввод/вывод множества объектов 561
Биты режимов 563
Указатели файлов 564
Вычисление позиции 564
Вычисление сдвига 565
Функция tellg() 567
Обработка ошибок файлового ввода/вывода 567
Реагирование на ошибки 567
Анализ ошибок 568
Файловый ввод/вывод с помощью методов 570
Как объекты записывают и читают сами себя 570
Как классы записывают и читают сами себя 572
Код типа объекта 578
Перегрузка операторов извлечения и вставки 581
Перегрузка cout и cin 581
Перегрузка << и >> для файлов 583
Память как поток 585
Аргументы командной строки 586
Вывод на печатающее устройство 589
Резюме 590
Вопросы 591
Упражнения 592
Глава 13. Многофайловые программы 596
Причины использования многофайловых программ 596
Библиотеки классов 597
Организация и концептуализация 598
Создание многофайловой программы 598
Заголовочные файлы 599
Директории 599
Проекты 600
Межфайловое взаимодействие 600
Взаимодействие исходных файлов 600
Заголовочные файлы 605
Пространства имен 609
Класс сверхбольших чисел 613
Числа как строки 613
Описатель класса 614
Методы 615
Прикладная программа 617
Моделирование высотного лифта 619
Работа программы ELEV 620
Проектирование системы 621
Листинг программы ELEV 623
Диаграмма состояний для программы ELEV 634
Резюме 635
Вопросы 636
Проекты 638
Глава 14. Шаблоны и исключения 640
Шаблоны функций 640
Шаблон простой функции 642
Шаблоны функций с несколькими аргументами 644
Шаблоны классов 647
Контекстозависимое имя класса 651
Создание класса связных списков с помощью шаблонов 653
Хранение пользовательских типов 655
UML и шаблоны 658
Исключения 659
Для чего нужны исключения 660
Синтаксис исключений 661
Простой пример исключения 662
Многократные исключения 666
Исключения и класс Distance 668
Исключения с аргументами 670
Класс bad_alloc 673
Размышления об исключениях 674
Резюме 675
Вопросы 676
Упражнения 678
Глава 15. Стандартная библиотека шаблонов (STL) 681
Введение в STL 682
Контейнеры 682
Алгоритмы 687
Итераторы 688
Возможные проблемы с STL 689
Алгоритмы 690
Алгоритм find () 690
Алгоритм count () 691
Алгоритм sort() 692
Алгоритм search() 692
Алгоритм merge() 693
функциональные объекты 694
Пользовательские функции вместо функциональных объектов 695
Добавление _if к аргументам 696
Алгоритм for_each () 697
Алгоритм transform() 697
Последовательные контейнеры 698
Векторы 699
Списки 702
Итераторы 706
Итераторы как интеллектуальные указатели 706
Итераторы в качестве интерфейса 708
Соответствие алгоритмов контейнерам 710
Работа с итераторами 713
Специализированные итераторы 717
Адаптеры итераторов 717
Потоковые итераторы 720
Ассоциативные контейнеры 724
Множества и мультимножества 725
Отображения и мультиотображения 729
Ассоциативный массив 730
Хранение пользовательских объектов 731
Множество объектов person 732
Список объектов класса person 735
функциональные объекты 738
Предопределенные функциональные объекты 739
Создание собственных функциональных объектов 741
функциональные объекты и поведение контейнеров 746
Резюме 746
Вопросы 747
Упражнения 749
Глава 16. Разработка объектно-ориентированного ПО 752
Эволюция процесса создания программного обеспечения 752
Процесс просиживания штанов 753
Каскадный процесс 753
Объектно-ориентированное программирование 753
Современные подходы 754
Моделирование вариантов использования 755
Действующие субъекты 755
Варианты использования 756
Сценарии 756
Диаграммы вариантов использования 757
Описания вариантов использования 758
От вариантов использования к классам 758
Предметная область программирования 759
Рукописные формы 760
Допущения 762
Программа LANDLORD: стадия развития 762
Действующие субъекты 762
Варианты использования 762
Описание вариантов использования 763
Сценарии 765
Диаграммы действий UML 765
От вариантов использования к классам 766
Список существительных 766
Уточнение списка 767
Определение атрибутов 768
От глаголов к сообщениям 768
Диаграмма классов 770
Диаграммы последовательностей 770
Написание кода 774
Заголовочный файл 775
Исходные .cpp файлы 780
Вынужденные упрощения 789
Взаимодействие с программой 789
Заключение 791
Резюме 791
Вопросы 792
Проекты 794
Приложение А. Таблица ASCII 796
Приложение Б. Таблица приоритетов операций C++ 803
Таблица приоритетов операций 803
Зарезервированные слова 803
Приложение В. Microsoft Visual C++ 806
Элементы экрана 806
Однофайловые программы 807
Компоновка существующего файла 807
Создание нового файла 808
Ошибки 808
Информация о типах в процессе исполнения (RTTI) 808
Многофайловые программы 809
Проекты и рабочие области 809
Работа над проектом 809
Сохранение, закрытие и открытие проектов 810
Компиляция и компоновка 811
Программы с консольной графикой 811
Отладка программ 811
Пошаговая трассировка 812
Просмотр переменных 812
Пошаговая трассировка функций 812
Точки останова 813
Приложение Г. Borland C++ Builder 814
Запуск примеров в C++ Builder 815
Очистка экрана 815
Создание нового проекта 815
Задание имени и сохранение проекта 817
Работа с существующими файлами 817
Компиляция, связывание и запуск программ 818
Запуск программы в C++ Builder 818
Запуск программы в MS DOS 818
Предварительно скомпилированные заголовочные файлы 818
Закрытие и открытие проектов 818
Добавление заголовочного файла к проекту 819
Создание нового заголовочного файла 819
Редактирование заголовочного файла 819
Определение местонахождения заголовочного файла 819
Проекты с несколькими исходными файлами 820
Создание дополнительных исходных файлов 820
Добавление существующих исходных файлов 820
Менеджер проектов 821
Программы с консольной графикой 821
Отладка 822
Пошаговый прогон 822
Просмотр переменных 822
Пошаговая трассировка функций 822
Точки останова 823
Приложение Д. Упрощенный вариант консольной графики 824
Использование подпрограмм библиотеки консольной графики 825
Функции библиотеки консольной графики 825
Реализация функций консольной графики 827
Компиляторы Microsoft 827
Компиляторы Borland 828
Листинги исходных кодов 828
Приложение Е. Алгоритмы и методы STL 836
Алгоритмы 836
Методы 843
Итераторы 845
Приложение Ж. Ответы и решения 847
Глава 1 847
Глава 2 847
Глава 3 849
Глава 4 853
Глава 5 855
Глава 6 859
Глава 7 862
Глава 8 866
Глава 9 871
Глава 10 876
Глава 11 881
Глава 12 886
Глава 13 889
Глава 14 890
Глава 15 894
Глава 16 898
Приложение 3. Библиография 899
Углубленное изучение C++ 899
Основополагающие документы 900
UML 900
История C++ 901
И другое 901
Алфавитный указатель 902
Эта книга посвящается GGL и ее неукротимому духу
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
Схожі підручники
- РЕГІОНАЛЬНА ЕКОНОМІКА (частина 1)
- Методичні вказівки до виконання практичного заняття на тему «Штучний базис. М-базис.»
- Загальні питання з курсу Українська мова
- Скупой рыцарь (Сцены из ченстоновой трагикомедии The Covetous Knight) (онлайн)
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн
- Методичка з курсу Політологія