ОГЛАВЛЕНИЕ 5

Введение 17

Часть 1. Первое знакомство с С++

Глава 1.  Написание вашей первой программы 25

    Постигая концепции С++ 25

    Что такое программа 26

    Как пишут программы 26

    Инсталляция Dev-C++ 27

    Настройка русского языка

    Как настроить русский язык в консольных программах?

        Настройка Dev-C++ 30

    СОВЕТ ДНЯ

    Создание первой программы 31

        Введение кода 32

        Построение вашей программы 34

    Выполнение программы 36

        Dev-C++ — это не Windows 36

        Помощь в Dev-C++ 36

    Разбор программ 36

        Определение структуры программ С++ 37

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

        Использование инструкций в программах 38

        Объявления 38

        Генерирование вывода 39

    Вычисление выражений 39

        Сохранение результатов выражения 39

        Обзор программы Convert продолжается... 40    

Глава 2. Премудрости объявления переменных 41

    Объявление переменных 41

    Объявление разных типов переменных 42

        Ограничения, налагаемые на целые числа в С++ 43

            Округление до целых значений 43

            Ограничения диапазона 43

        Решение проблемы усечения дробной части 44

        Ограничения, налагаемые на числа с плавающей точкой 44

            Перечисление 44

            Скорость вычислений 45

            Потеря точности 45

            Ограниченность диапазона 45

    Объявления типов переменных 45

        Константы 47

        Специальные символы 47

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

    Выражения смешанного типа 48

Глава 3. Выполнение математических операций 50

    Бинарная арифметика 50

    Анализ выражений 51

    Определение порядка операций 52

    Выполнение унарных операций 53

    Использование операторов присвоения 54

Глава 4. Выполнение логических операций 55

       Зачем нужны логические операторы 55

      Использование простых логических операторов 55

          Хранение логических значений 57

          Использование целых переменных в качестве логических 58

          Логические операции и действительные переменные 58

              Сокращённые вычисления в С++ 59

      Бинарные числа в С++ 60

          Десятичная система счисления 60

          Другие системы счисления 60

          Двоичная система счисления 60

          Выражения с римскими числами 61

      Выполнение побитовых логических операций 62

           Побитовые операции с одним битом 62

           Использование побитовых операторов 63

           Простой пример 64

           Практическое применение логических вычислений 65  

Глава 5. Операторы управления программой 66

      Управление ходом программы с помощью команд ветвления 66

      Выполнение циклов 68

          Цикл while 68

          Использование операторов инкремента и декремента 70

          Использование цикла for 71

          Избегайте бесконечных циклов 73

          Специальные операторы управления циклом 73

      Вложенные команды управления 76

      Инструкция выбора 77

Часть 2. Становимся функциональными программистами 79

Глава 6. Создание функций 81

      Написание и использование функций 81

          Определение функции sumSequence( ) 83

          Вызов функции sumSequence( ) 83

          Разделяй и властвуй 83

      Подробный анализ функций 84

          Простые функции 85

          Функции с аргументами 85

              Функции с одним аргументом 85

              Функции с несколькими аргументами 87

              Функция main( ) 87

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

      Определение прототипов функций 89

      Хранение переменных в памяти 90

      Использование заголовочных файлов 91   

_________________

7 стр.

Глава 7. Хранение последовательностей в массивах 92

    Преимущества массивов 92

        Работа с массивами 93

        Инициализация массива 96

        Выход за границы массива 97

        Использовать ли массивы 97

        Определение и использование массивов с элементами-массивами 98

    Использование символьных массивов 98

        Создание строки символов 99

    Управление строками 100

    Тип string 103

Глава 8. Первое знакомство с указателями в С++ 105

    Размер переменной 105

    Что такое адрес 106

    Адресные операторы 106

    Использование указателей 108

        Сравнение указателей и почтовых адресов 109

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

    Передача указателей функциям 111

        Передача аргументов по значению 112

        Передача значений указателей 112

        Передача аргументов по ссылке 113

    Использование кучи 113

        Область видимости 113

        Проблемы области видимости 114

        Использование блока памяти 115    

Глава 9. Второе знакомство с указателями 117

    Операции с указателями 117

        Повторное знакомство с массивами в свете указателей 118

        Использование операций над указателями для адресации внутри массива 119

        Использование указателей для работы со строками 120

        Почему при работе со строками пользуются указателями 122

        Операции с указателями других типов 122

        Отличия между указателями и массивами 122

    Объявление и использование массивов указателей 124

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

        Доступ к аргументам main( ) 126

            Аргументы в DOS 127

            Аргументы в Dev-C++ 127

            Аргументы в Windows 127    

Глава 10. Отладка программ на С++ 128

    Определение типа ошибки 128

    Использование отладочной печати 128

        Выявление "жучка" № 1 130

        Выявление "жучка" № 2 131

    Использование отладчика 134

        Что такое отладчик 134

_________________

8 стр.

        Работа с отладчиком 134

        Запуск тестовой программы 135

        Пошаговое выполнение программы 136

Часть 3. Введение в классы 143

Глава 11. Знакомство с объектно-ориентированным программированием 145

    Микроволновые печи и уровни абстракции 145

        Приготовление блюд с помощью функций 146

        Приготовление "объектно-ориентированных" блюд 146

    Классификация микроволновых печей 146

    Зачем нужна классификация 147

Глава 12. Классы в С++ 149

    Введение в классы 149

    Формат класса 149

    Обращение к членам класса 150

Глава 13. Работа с классами 154

    Активизация объектов 154

        Моделирование реальных объектов 155

        Зачем нужны функции-члены 155

    Добавление функции-члена 156

        Создание функции-члена 156

        Именование членов класса 157

    Вызов функций-членов 157

        Обращение к функциям-членам 158

        Доступ к членам из функции-члена 159

        Именование текущего объекта 160

    Разрешение области видимости 161

    Определение функции-члена 162

    Определение функций-членов вне класса 164

    Перегрузка функций-членов 165

Глава 14. Указатели на объекты 167

    Определение массивов и указателей 167

    Объявление массивов объектов 168

    Объявление указателей на объекты 169

        Разыменование указателей на объекты 169

        Использование стрелок 170

    Передача объектов функциям 171

        Вызов функции с передачей объекта по значению 171

        Вызов функции с передачей указателя 172

        Передача объекта по ссылке 173

    Зачем использовать указатели и ссылки 174

    Возврат к куче 175

    Сравнение указателей и ссылок 175

    Почему ссылки не используются вместо указателей 175

    Использование связанных списков 176

        Другие операции над связанным списком 177

        Программа LinkedListData 178

    Списки в стандартной библиотеке 180

_________________

9 стр.

Глава 15. Защищённые члены класса: не беспокоить! 181

    Защищённые члены 181

        Зачем нужны защищённые члены 181

        Как устроены защищённые члены 182

    Чем хороши защищённые члены 183

        Защита внутреннего устройства класса 183

        Классы с ограниченным интерфейсом 184

    Обращение к защищённым членам 184

Глава 16. Создание и удаление объектов 188

    Создание объектов 188

    Использование конструкторов 189

        Зачем нужны конструкторы 189

        Работа с конструкторами 190

            Конструирование одного объекта 190

            Конструирование нескольких объектов 192

            Конструирование составных объектов 192

    Что такое деструктор 194

        Зачем нужен деструктор 194

        Работа с деструкторами 194

Глава 17. Аргументация конструирования 198

    Как снабдить конструктор аргументами 198

        Зачем конструкторам нужны аргументы 198

        Как использовать конструктор с аргументами 199

    Перегрузка конструктора 200

    Определение конструкторов по умолчанию 203

    Конструирование членов класса 204

        Конструкторы константных членов 208

    Управление последовательностью конструирования 208

        Локальные объекты создаются последовательно 209

        Статические объекты создаются один раз 209

        Все глобальные объекты создаются до вызова main( ) 210

        Порядок создания глобальных объектов не определён 210

        Члены создаются в порядке их объявления 211

        Деструкторы удаляют объекты в порядке, обратном порядку их создания 212  

Глава 18.

    Копирование объекта 213

        Зачем нужен копирующий конструктор 213

        Использование конструктора копирования 214

    Автоматический конструктор копирования 215

    "Мелкие" и "глубокие" копии 217

    Временные объекты 221

        Как избегать временных объектов 222

        Аргумент копирующего конструктора 223

Глава 19.

    Определение статических членов 224

        Зачем нужны статические члены 224

        Использование статических членов 225

        Обращение к статическим данным-членам 226

        Применение статических данных-членов 227

_________________

10 стр.

     Объявление статических функций-членов 228

     Что такое this 230

Часть 4. Наследование 231

Глава 20.

    Зачем нужно наследование 234

    Как наследуется класс 234

        Использование подкласса 236

        Конструирование подкласса 237

        Деструкция подкласса 238

    Отношение СОДЕРЖИТ 238

Глава 21.

    Зачем нужен полиморфизм 243

    Как работает полиморфизм 245

    Когда функция не является виртуальной 246

    Виртуальные особенности 247

Глава 22.

    Разложение 249

    Реализация абстрактных классов 253

        Концепция абстрактных классов 254

        Создание полноценного класса из абстрактного 255

        Передача абстрактных классов 257

        Нужны ли чисто виртуальные функции 257

    Разделение исходного кода С++ 259

        Разделение программы — класс Student 260

        Определение пространства имён 261

        Реализация класса Student 261

        Разделение программы — класс GraduateStudent 262

        Реализация приложения 263

        Файл проекта 264

        Создание файла проекта в Dev-C++ 265

Часть 5. Полезные особенности 269

Глава 23.

    Сравнение операторов и функций 271

    Потоковые операторы 272

    Мелкое копирование — глубокие проблемы 272

    Переопределение оператора присвоения 273

    Защита от копирования 276

Глава 24.

    Как работают потоки ввода-вывода 277

    Знакомство с подклассами fstream 278

    Прямое чтение из потока 282

    Что такое endl 284

    Подклассы strstream 285

    Работа с манипуляторами 287

_________________

11 стр.

Глава 25.

    Зачем нужен новый механизм обработки ошибок 291

    Механизм исключительных ситуаций 293

    Так что же мы будем бросать? 295

Глава 26.

    Механизм множественного наследования 298

    Устранение неоднозначностей множественного наследования 300

    Виртуальное наследование 301

    Конструирование объектов 306

    Отрицательные стороны множественного наследования 306

Глава 27.

    Обобщение функции в шаблон 309

    Шаблоны классов 311

    Зачем нужны шаблоны классов 314

    Советы по использованию шаблонов 316

Глава 28.

    Контейнер string 317

    Контейнер list 320

    Итераторы 321

    Использование контейнера  map 324

Часть 6. Великолепная десятка 329

Глава 29.

    Включение всех предупреждений и сообщений об ошибках 331

    Добейтесь чистой компиляции 332

    Используйте последовательный стиль программирования 332

    Ограничивайте видимость 332

    Комментируйте свою программу 334

    Хотя бы один раз выполните программу пошагово 334

    Избегайте перегрузки операторов 334

    Работа с кучей 334

    Используйте для обработки ошибок исключительные ситуации 335

    Избегайте множественного наследования 335    

Глава 30.

    Настройка редактора по вашему вкусу 336

    Подсветка парных скобок 337

    Включение обработки исключений 337

    Включение отладочной информации 338

    Создание файла проекта 338

    Настройка справки 338

    Переустановка точек останова после редактирования файла 339

    Избегайте некорректных имён файлов 339

    Включите заголовочные файлы в ваш проект 339

    Работа с профайлером 339

_________________

12 стр.

Глава 31.

    BUDGET1 343

    BUDGET2 348

    BUDGET3 355

        Реализация модуля со связанным списком 356

        Работа со счетами 358

        Классы связанных списков 363

        Оценка бюджета 365

    BUDGET4 366

        Реализация связанного списка в виде шаблона класса 366

        Исходный код BUDGET4 368

        Подведение итогов 373

    BUDGET5 373

        Использование шаблона класса из STL 373

        Создание списка счетов 378

Приложение. Содержимое прилагаемого компакт-диска 379

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

_________________

13 стр.

Моим друзьям и семье, которые помогли мне стать "чайником" в ещё большей степени, чем я есть на самом деле.

Об авторе

Стефан P. Дэвис ( Stephen R. Davis ) живёт с женой и сыном недалеко от Далласа, штат Техас. Он и его семья — авторы множества книг, включая такие бестселлеры, как С++ для "чайников" и С++ Weekend Crash Course . Стефан работает в компании L-3 Communications.

Благодарности

Я считаю странным то, что на обложке любой книги, особенно такой, как эта, написано только одно имя. В действительности свой труд в создание книги вкладывает громадное число людей. Для начала я хотел бы поблагодарить своего главного редактора Мэри Кордер ( Mary Corder ) и агента Клодетт Мур ( Claudette Moore ), направлявших меня при формировании материала этой книги. Во время работы над книгой я значительно повысил свой уровень как редактор и корректор, и в этом мне помогли редакторы первых изданий. И если бы не помощь координатора первого и второго изданий Сьюзанны Томас ( Suzanne Thomas ), эта книга вообще не была бы напечатана. Однако, несмотря ни на что, на обложке представлено только одно имя, а значит, ответственность за все неточности в тексте должен нести именно его обладатель.

Хочу также поблагодарить свою жену Дженни и сына Кинси за их терпение и преданность.

И наконец, новости о последних событиях из мира животных в моём доме. Для тех, кто не читал ни одной из моих книг, объясняю, что такая сводка встречается в них регулярно.

Мои две собаки, Скутер и Труди, чувствуют себя нормально, хотя Труди почти ослеп. Наши два кролика, Бивас и Батхед, отправились на большую зелёную небесную лужайку после почти полуторалетнего проживания на газоне перед нашим домом.

_________________

16 стр. Введение