| Предисловие | 24 |
| |
| Введение | 25 |
| |
| Новые концепции программирования | 25 |
| Объектно-ориентированное программирование | 25 |
| Унифицированный язык моделирования | 26 |
| Языки и платформы разработки | 26 |
| Для чего нужна эта книга | 27 |
Новые концепции | 27 |
Последовательность изложения материала | 27 |
Знания, необходимые для чтения этой книги | 28 |
| Техническое и программное обеспечение | 28 |
| Консольные программы | 28 |
| Исходные тексты программ | 28 |
| Упражнения | 29 |
| Проще, чем кажется | 29 |
| Преподавателям | 29 |
Стандартный C++ | 29 |
Унифицированный язык моделирования (UML) | 29 |
Средства разработки программного обеспечения | 30 |
Различия между С и 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 |
| C++ и С | 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 |
Алгоритм searchQ | 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 |
Исходные .срр файлы | 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 |