Это короткий фрагмент для ознакомления с книгой.
С++ для "чайников". Дэвис Стефан Р.
Автор ФБ2( FB2 ) версии книги рерайтер Александр Иванович Фурс © ( Минск. Беларусь ). 2015 г. Эл.почта: shura_furs@mail.ru От рерайтера: 1 ) Мною было исправлено несколько опечаток и ошибок в тексте программ и тексте оригинальной PDF книги, например ( На 168 стр. оригинала ошибка текста программы ArrayOfStudents написано Students[ 10 ] а надо Student s[ 10 ]. Пропущен пробел между t и s. ) и др. 2 ) Посталены буквы "ё" вместо буквы "е" там где они должны быть. 3 ) Построчные комментарии заменены на многострочные, что улучшает читабельность книги по сравнению с оригинальной PDF версией, особенно на мобильных устройствах. 4 ) Чёрно-белые картинки заменены на цветные скриншоты из Windows7. 5 ) Напечатал СОВЕТ ДНЯ из среды разработки Dev-C++ . 6 ) Добавил инструкцию по русификации консоли. 7 ) Сделал более подробную и глубокую навигацию по содержанию, чем у оригинала ( гиперссылки по всему тексту ). 8 ) Оставил и немного изменил колонтитулы , для более комфортного восприятия и ориентации по тексту. 9 ) В текстах программ сохранил стиль форматирования. 10 ) Сделал цветные пиктограмки. Всё остальное как в оригинале.
Вы можете переслать любую сумму рерайтеру за переделку книги в ФБ2 (FB2) формат, на любой из нижеприведённых WEBMONEY кошельков: Z587187844833 ; B889951872392 ; R184950127691 ; U227750651065
или перечислив деньги на счёт: ОАО "АСБ БЕЛАРУСБАНК" г. Минск филиал 527 "Белжердор" лицевой счёт №37001444
C++ for "dummies". by Stephen Randy Davis Publishers Since 1807 http://eu.wiley.com/WileyCDA/
WILEY
Wiley Publishing, Inc.
Стефан Р. Дэвис
С++ для "чайников". Дэвис Стефан Рэнди.
Лучшее руководство по С++ для начинающих — соответсвует последним стандартам языка!
Для сомневающихся.
На прилагаемом компакт-диске — исходные тексты всех программ и компилятор.
5-е издание.
Более 120 миллионов продано по всему миру.
ДИАЛЕКТИКА
Москва * Санкт-Петербург * Киев
2007
ББК 32.973.26-018.2.75
Д94
УДК 681.3.07
Компьютерное издательство "Диалектика"
Зав. редакцией С.Н. Тригуб
Перевод с английского и редакция канд. техн. наук И.В. Красикова
По общим вопросам обращайтесь в издательство "Диалектика" по адресу: info@dialektika.com, http://www.dialektika.com 115419, Москва, а/я 783; 03150, Киев, а/я 152
http://www.williamspublishing.com/ Д94 , 5-е издание. : Пер. с англ. — М. : Издательский дом "Вильямс", 2007. — 384 с.: ил. — Парал. тит. англ. ISBN 978-5-8459-0723-3 ( рус. )
Книга представляет собой введение в язык программирования С++. Основное отличие данной книги от предыдущих изданий С++ для чайников в том, что это издание не требует от читателя каких-либо дополнительных знаний, в то время как предыдущие издания опирались на знание читателем языка программирования С. Несмотря на простоту изложения материала, он подан в книге достаточно строго, так что, изучив основы программирования на С++ с помощью этой книги читатель уже не будет сталкиваться с трудностями при дальнейшем изучении языка. Эта книга не учит программированию для Windows или созданию красивого интерфейса двумя движениями мышью; изложенный в ней материал не привязан к какому-то определённому компилятору или операционной системе. Она вряд ли будет полезна профессиональному программисту, но если ваша цель — глубокое знание языка программирования и вы не знаете, с чего начать, — эта книга для вас. ББК 32.973.26-018.2.75 Все названия программных продуктов являются зарегистрированными торговыми марками соответствующих фирм. Никакая часть настоящего издания ни в каких целях не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирование и запись на магнитный носитель, если на это нет письменного разрешения издательства JOHN WILEY&Sons, Inc. Copyright © 2008 by Dialektika Computer Publishing. Original English language edition Copyright © 2007 by Wiley Publishing, Inc. All rights reserved including the right of reproduction in whole or in part in any form. This translation published by arrangement with Wiley Publishing, Inc.
ISBN 978-5-8459-0723-3 ( рус. )
© Компьютерное издательство "Диалектика", 2007 г.
ISBN 0-7645-6852-3 ( англ. )
© Wiley Publishing Inc.,2004
ОГЛАВЛЕНИЕ...5
СОДЕРЖАНИЕ 6
Введение 17
Часть 1. Первое знакомство с С++ 23
Глава 1. Написание вашей первой программы 25
Глава 2. Премудрости объявления переменных 41
Глава 3. Выполнение математических операций 50
Глава 4. Выполнение логических операций 55
Глава 5. Операторы управления программой 66
Часть 2. Становимся функциональными программистами 79
Глава 6. Создание функций 81
Глава 7. Хранение последовательностей в массивах 92
Глава 8. Первое знакомство с указателями в С++ 105
Глава 9. Второе знакомство с указателями 117
Глава 10. Отладка программ на С++ 128
Часть 3. Введение в классы 143
Глава 11. Знакомство с объектно-ориентированным программированием 145
Глава 12. Классы в С++ 149
Глава 13. Работа с классами 154
Глава 14. Указатели на объекты 167
Глава 15. Защищённые члены класса: не беспокоить! 181
Глава 16. Создание и удаление объектов 188
Глава 17. Аргументация конструирования 198
Глава 18. Копирующий конструктор 213
Глава 19. Статические члены 224
Часть 4. Наследование 231
Глава 20. Наследование классов 233
Глава 21. Знакомство с виртуальными функциями-членами: настоящие ли они 240
Глава 22. Разложение классов 249
Часть 5. Полезные особенности 269
Глава 23. Оператор присвоения 271
Глава 24. Использование потоков ввода-вывода 277
Глава 25. Обработка ошибок и исключения 290
Глава 26. Множественное наследование 298
Глава 27. Шаблоны С++ 308
Глава 28. Стандартная библиотека шаблонов 317
Часть 6. Великолепная десятка 329
Глава 29. Десять способов избежать ошибок 331
Глава 30. Десять основных возможностей Dev-C++ 336
Глава 31. Программа BUDGET 343
Приложение. Содержимое прилагаемого компакт-диска 379
Пиктограммы
Предметный указатель 380
СОДЕРЖАНИЕ...6
ОГЛАВЛЕНИЕ 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
Зачем нужен копирующий конструктор 213
Использование конструктора копирования 214
Автоматический конструктор копирования 215
"Мелкие" и "глубокие" копии 217
Временные объекты 221
Как избегать временных объектов 222
Аргумент копирующего конструктора 223
Глава 19. Статические члены 224
Определение статических членов 224
Зачем нужны статические члены 224
Использование статических членов 225
Обращение к статическим данным-членам 226
Применение статических данных-членов 227
_________________
10 стр. Содержание
Объявление статических функций-членов 228
Что такое this 230
Часть 4. Наследование 231
Глава 20. Наследование классов 233
Зачем нужно наследование 234
Как наследуется класс 234
Использование подкласса 236
Конструирование подкласса 237
Деструкция подкласса 238
Отношение СОДЕРЖИТ 238
Глава 21. Знакомство с виртуальными функциями-членами: настоящие ли они 240
Зачем нужен полиморфизм 243
Как работает полиморфизм 245
Когда функция не является виртуальной 246
Виртуальные особенности 247
Глава 22. Разложение классов 249
Разложение 249
Реализация абстрактных классов 253
Концепция абстрактных классов 254
Создание полноценного класса из абстрактного 255
Передача абстрактных классов 257
Нужны ли чисто виртуальные функции 257
Разделение исходного кода С++ 259
Разделение программы — класс Student 260
Определение пространства имён 261
Реализация класса Student 261
Разделение программы — класс GraduateStudent 262
Реализация приложения 263
Файл проекта 264
Создание файла проекта в Dev-C++ 265
Часть 5. Полезные особенности 269
Глава 23. Оператор присвоения 271
Сравнение операторов и функций 271
Потоковые операторы 272
Мелкое копирование — глубокие проблемы 272
Переопределение оператора присвоения 273
Защита от копирования 276
Глава 24. Использование потоков ввода-вывода 277
Как работают потоки ввода-вывода 277
Знакомство с подклассами fstream 278
Прямое чтение из потока 282
Что такое endl 284
Подклассы strstream 285
Работа с манипуляторами 287
_________________
11 стр. Содержание
Глава 25. Обработка ошибок и исключения 290
Зачем нужен новый механизм обработки ошибок 291
Механизм исключительных ситуаций 293
Так что же мы будем бросать? 295
Глава 26. Множественное наследование 298
Механизм множественного наследования 298
Устранение неоднозначностей множественного наследования 300
Виртуальное наследование 301
Конструирование объектов 306
Отрицательные стороны множественного наследования 306
Глава 27. Шаблоны С++ 308
Обобщение функции в шаблон 309
Шаблоны классов 311
Зачем нужны шаблоны классов 314
Советы по использованию шаблонов 316
Глава 28. Стандартная библиотека шаблонов 317
Контейнер string 317
Контейнер list 320
Итераторы 321
Использование контейнера map 324
Часть 6. Великолепная десятка 329
Глава 29. Десять способов избежать ошибок 331
Включение всех предупреждений и сообщений об ошибках 331
Добейтесь чистой компиляции 332
Используйте последовательный стиль программирования 332
Ограничивайте видимость 332
Комментируйте свою программу 334
Хотя бы один раз выполните программу пошагово 334
Избегайте перегрузки операторов 334
Работа с кучей 334
Используйте для обработки ошибок исключительные ситуации 335
Избегайте множественного наследования 335
Глава 30. Десять основных возможностей Dev-C++ 336
Настройка редактора по вашему вкусу 336
Подсветка парных скобок 337
Включение обработки исключений 337
Включение отладочной информации 338
Создание файла проекта 338
Настройка справки 338
Переустановка точек останова после редактирования файла 339
Избегайте некорректных имён файлов 339
Включите заголовочные файлы в ваш проект 339
Работа с профайлером 339
_________________
12 стр. Содержание
Глава 31. Программа BUDGET 343
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 стр. Введение
ВВЕДЕНИЕ...17
ОГЛАВЛЕНИЕ СОДЕРЖАНИЕ Добро пожаловать в пятое издание книги С++ для "чайников". В ней вы найдёте всю необходимую для изучения С++ информацию, изложенную доступным языком и не отягощённую излишними подробностями.О чём эта книга Книга, которую вы держите в руках, — это введение в язык программирования С++. Она начинает обучение с самого начала ( а откуда ещё можно начинать? ) и ведёт вас по пути от азов к более сложным вопросам программирования на С++. От читателя не требуется каких-либо знаний в области программирования. В книге масса примеров. Любая рассматриваемая концепция сопровождается конкретными примерами её использования на практике — от нескольких строк кода до завершённых работоспособных программ. В отличие от других книг по программированию на С++, в этой книге вопрос "почему" считается не менее важным, чем вопрос "как". И потому перед изложением конкретных особенностей языка С++ я старался объяснить читателю, как они действуют в целом. Ведь каждая структурная особенность языка — это отдельный штрих единой картины. Чтобы уяснить, зачем нужны те или иные особенности языка, постарайтесь понять, как они работают. Прочитав книгу, вы сможете написать на С++ вразумительную программу и, что не менее важно, будете понимать, почему и как она работает. Эта книга может использоваться и как справочник. Например, если вы хотите разобраться, как работать с шаблонами, вы просто обращаетесь к главе 27, "Шаблоны С++", не читая всю книгу. В каждой главе имеются ссылки на изложенный ранее материал, необходимый при чтении данной главы, что облегчает чтение книги не по порядку. Эта книга не обучает программированию для какой-то определённой операционной системы. Она одинаково полезна как для программиста в Windows, так и для программиста в OS/2, Unix, Linux, BeOS или иной операционной системе. Если вас интересует программирование для конкретной операционной системы, то поищите более специализированную книгу.
Прилагаемый компакт-диск На прилагаемом к книге компакт-диске содержатся исходные тексты всех примеров из этой книги. Это избавит вас от излишней работы по их набору на клавиатуре. Ваш компьютер не в состоянии непосредственно запустить на выполнение программу на языке С++. Сначала такая программа должна быть обработана компилятором, который создаёт из исходного текста программы исполняемый файл. ( О том, как это делается, подробно рассказывается в главе 1, "Написание вашей первой программы". ) Программы в данной книге могут быть скомпилированы любым стандартным компилятором С++, но если у вас его нет, то вам поможет прилагаемый компакт-диск, на котором имеется интегрированная среда разработчика Dev-C++. Однако это не значит, что вы должны использовать именно её. Кроме того, на этом компакт-диске вы найдёте много интересных и полезных материалов и программ, связанных с использованием языка С++. _________________ 17 стр. Введение
Что такое С++ С++ представляет собой объектно-ориентированный низкоуровневый язык программирования, отвечающий стандартам ANSI и Международной организации стандартов ( International Standards Organization — ISO ). Объектная ориентированнось С++ означает, что он поддерживает стиль программирования, упрощающий кодирование крупномасштабных программ и обеспечивающий их расширяемость. Будучи низкоуровневым языком, С++ может генерировать весьма эффективные высокоскоростные программы. В качестве объектно-ориентированного языка программирования С++ обладает высокой степенью гибкости и расширяемости, что обеспечивает его применение для создания крупномасштабных проектов. В настоящее время С++ является одним из наиболее популярных языков программирования для разработки приложений любого типа. Большинство современных программ, работающих на персональных компьютерах, написаны именно на С++. С++ на 99.9% стандартизированный язык, что делает его высокопереносимым языком программирования. Компиляторы для С++ есть во всех операционных системах, и все они поддерживают один и тот же С++ ( ряд компиляторов имеет собственные расширения языка, но все компиляторы обязаны поддерживать стандарт С++ ).
Соглашения, принятые в книге Описываемые сообщения или любая другая информация, отображаемая на экране, будет выглядеть так:
Hi mom!
Программный код будет представлен таким же образом:
// программа void main( ) { }
Если вы решили набирать программу вручную, следите за тем, чтобы её текст полностью соответствовал напечатанному в книге, за исключением количества пробелов, которое может быть произвольным. Всяческие компьютерные сообщения, такие как команды и имена функций, будут выглядеть вот так. После имён функций всегда следуют открывающая и закрывающая скобки, например myFavoriteFunction( ). Аргументы функции в изложении обычно опускаются ( кроме случаев, когда их указание необходимо для понимания или большей ясности изложения ). Согласитесь, гораздо проще сказать "это функция myFavoriteFunction( )", чем "это функция myFavoriteFunction( int , float )". Иногда для выполнения некоторых действий в книге рекомендуется использовать специальные команды клавиатуры. Например, когда в тексте содержится инструкция: нажать <Ctrl+C>, вам следует, удерживая нажатой клавишу <Ctrl>, нажать клавишу <С>. Вводить знак "плюс" при этом не нужно. Время от времени будут использоваться команды меню, например File => Open. В этой строке для открытия меню File и выбора нужной команды из него предлагается использовать клавиатуру или мышь. В связи с тем, что в разных средах программирования для выполнения одинаковых действий часто используются разные комбинации клавиш, я буду редко использовать в книге функциональные клавиши — просто чтобы не запутывать читателей. _________________ 18 стр. Введение
Как организована эта книга Каждая новая структурная возможность языка будет охарактеризована следующим образом: -что представляет собой эта возможность; -зачем она включена в язык; -как она работает. Разделы книги щедро снабжены небольшими фрагментами программного кода. Каждый из них иллюстрирует представленные особенности или основные моменты некоторых моих разработок. Эти фрагменты не всегда закончены и в основном не представляют собой ничего существенного. Примечание. Необходимость соблюдать формат книги требовала переноса очень длинных строк кода. В конце таких строк появляется стрелка, которая напоминает о том, что следует продолжать ввод, не торопясь нажимать клавишу <Enter>. Я очень старался свести эти длинные строки кода к минимуму.
И ещё... Исходные тексты реальных программ обычно имеют очень большой объём. Однако именно реальные программы представляют собой отличный учебный материал для новичка, изучающего язык программирования. Ряд программ и пояснений по их работе вы найдёте на прилагаемом компакт-диске. Я использую одну демонстрационную программу, которую я назвал BUDGET. Она рождается как простая, процедурно ориентированная программа. Постепенно обрастая структурными особенностями, описанными в каждой новой части, к концу книги программа BUDGET предстанет перед вами во всей красе своего объектно-ориентированного содержимого. Возможно, работа с этой программой покажется вам страшной тратой времени. Если это так, вы можете пропустить первые варианты программы ( хотя, по мнению нашего редактора, замысел довольно удачный ). Тем не менее я надеюсь, что, разобрав программу BUDGET, вы постигнете тайну согласованной работы возможностей С++. Часть 1. ПЕРВОЕ ЗНАКОМСТВО С С++ Эта часть является отправной точкой нашего путешествия в мир С++. Вы начнёте его с нелёгкого испытания — написания своей первой компьютерной программы. Затем перейдёте к изучению синтаксиса языка. Часть 2. СТАНОВИМСЯ ФУНКЦИОНАЛЬНЫМИ ПРОГРАММИСТАМИ В этой части новоприобретённые знания основных команд С++ пополнятся способностью объединять фрагменты программного кода в модули и повторно использовать их в программах. Здесь также представлена внушающая наиболее благоговейный страх тема: указатели в С++. Если вам это ни о чём не говорит, не волнуйтесь — скоро вы обо всём узнаете. _________________ 19 стр. Введение
Часть 3. ВВЕДЕНИЕ В КЛАССЫ В этой части дело запутывается всё больше и больше: начинается обсуждение объектно-ориентированного программирования. По правде говоря, объектно-ориентированный подход к построению программ и есть главная причина возникновения и активного использования С++. Ведь отказавшись от объектно-ориентированных особенностей С++, мы просто возвратимся к его предшественнику — языку программирования С. В этом разделе обсуждаются такие понятия, как классы, конструкторы, деструкторы и прочие не менее "страшные" термины. Не волнуйтесь, если пока что вы не совсем понимаете, о чём идёт речь. Часть 4. НАСЛЕДОВАНИЕ Возможность наследования — это как раз то главное свойство объектно-ориентированного программирования, которое обеспечило ему известность и распространённость. Обсуждение этой одной из наиболее важных концепций, понимание которой служит ключом к эффективному программированию на С++, и является темой четвёртой части. Теперь дороги назад нет: закончив освоение этого материала, вы сможете назвать себя настоящим объектно-ориентированным программистом. Часть 5. ПОЛЕЗНЫЕ ОСОБЕННОСТИ К моменту знакомства с этой частью вы уже будете знать всё необходимое для эффективного программирования на С++. Здесь же затрагиваются некоторые оставшиеся дополнительные вопросы, такие как ввод-вывод, обработка ошибок и шаблоны. Часть 6. ВЕЛИКОЛЕПНАЯ ДЕСЯТКА Разве книга для "чайников" может считаться законченной без такой полезной напутствующей части? В её первой главе вы узнаете наилучшие способы избежать ошибок в программах. Во второй главе данной части вы познакомитесь со средой разработки Dev-C++. Среда разработки не является частью языка С++, но умение работать с ней составляет важную часть знаний и умений любого программиста. Использованные в этой книге пиктограммы : [Технические подробности] «Технические подробности, которые можно пропустить при первом чтении.» _________________ 20 стр. Введение [Советы] «Советы, которые помогут сохранить много времени и усилий.»
[Диск] «Материал на прилагаемом компакт-диске.»
[Помни!] «Запомните — это важно.»
[Атас!] «Тоже важное напоминание. Это указание о том, что здесь легко допустить ошибку и даже не догадаться о ней.»
Что дальше Обучить языку программирования — задача отнюдь не тривиальная. Это эначит не стандартная, не простая, не банальная ( прим. — рер. ). Я попытаюсь сделать это настолько мягко, насколько возможно, но вы должны будете поднатужиться и освоить некоторые элементы серьёзного программирования. Так что разомните пальцы, приготовьте для книжки почётное место рядом с клавиатурой и — приступим! _________________ 21 стр. Введение
Часть 1. ПЕРВОЕ ЗНАКОМСТВО с С++...23
ОГЛАВЛЕНИЕ
СОДЕРЖАНИЕ
Глава 1. НАПИСАНИЕ ВАШЕЙ ПЕРВОЙ ПРОГРАММЫ...25
Глава 2. ПРЕМУДРОСТИ ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ...41
Глава 3. ВЫПОЛНЕНИЕ МАТЕМАТИЧЕСКИХ ОПЕРАЦИЙ...50
Глава 4. ВЫПОЛНЕНИЕ ЛОГИЧЕСКИХ ОПЕРАЦИЙ...55
Глава 5. ОПЕРАТОРЫ УПРАВЛЕНИЯ ПРОГРАММОЙ...66
В этой части... И новейшие потрясающие воображение авиационные симуляторы, и незамысловатые, но мощные вычислительные программы состоят из одних и тех же базовых блоков. В этой части вы найдёте основные сведения, необходимые для написания самых замысловатых программ.
Глава 1. НАПИСАНИЕ ВАШЕЙ ПЕРВОЙ ПРОГРАММЫ...25
ОГЛАВЛЕНИЕ
В этой главе...
►Постигая концепции С++ 25
►Что такое программа 26
►Как пишут программы 26
►Инсталляция Dev-C++ 27
►Создание первой программы 31
►Выполнение программы 36
►Разбор программ 36
►Вычисление выражений 39
Итак, мы на старте. Никого вокруг нет — только вы, я и книга. Сосредоточьтесь и постарайтесь овладеть некоторыми фундаментальными понятиями.
Компьютер — это поразительно быстрая, но невероятно глупая машина. Он может выполнить то и только то, что прикажешь ( причём с умом! ), — ни больше, ни меньше.
К нашему глубокому сожалению, компьютер не понимает привычного человеку языка — ни английского, ни русского, ни какого-либо другого. Знаю, вы хотите возразить: "Я видел компьютеры, понимающие английский". В действительности язык понимала выполняемая компьютером специально разработанная программа. ( Это объяснение не совсем корректно. Но, с другой стороны, если я захочу рассказать своему маленькому сыну что-то слишком для него сложное, то постараюсь объяснить это доступными для него словами и понятиями. )
Компьютеры понимают язык, который называют машинным или языком программирования. Человеку крайне сложно разговаривать машинным языком. Поэтому в качестве посредника между компьютерами и людьми решили использовать такие языки высокого уровня, как С++. Они более или менее понятны людям и конвертируются в машинный язык, воспринимаемый компьютерами.
►Постигая концепции С++...25
В начале семидесятых консорциум очень умных людей разрабатывал компьютерную систему Multix. Её предназначением было обеспечение недорогого всеобщего доступа к графическим, текстовым и другим файлам, к электронной почте, эротике ( ладно, это я уже переборщил ). Конечно, это была совершенно глупая идея, и в целом проект провалился. Небольшая группа инженеров, работающих в лабораториях Белла, решила использовать фрагменты Multix в небольшой операционной системе, которую окрестили Unix ( Un-ix, Multix — словом, всё понятно? ). У этих инженеров не было одной большой мощной машины, а лишь несколько маломощных машин разных производителей. Поскольку все они были разные, каждую программу требовалось перерабатывать под каждую машину. Чтобы избежать этих мучений, был разработан небольшой, но мощный язык, который назвали С. _______________ 25 стр. Глава 1. Написание вашей первой программыЯзык С оказался действительно мощным и очень скоро завоевал передовые позиции среди средств разработки программного обеспечения. Однако со временем в программировании появились новые технологии ( например, достойное самого большого внимания объектно-ориентированное программирование ), которые постепенно вытесняли язык С. Не желая остаться за бортом, инженерное сообщество усовершенствовало С, дополнив его новыми возможностями и получив в результате новый язык программирования — С++. Язык С++ включает: ►1.Семантику: словарь понятных для людей команд, которые конвертируются в машинный язык; ►2.Синтаксис: структуру языка ( или грамматику ), которая предоставляет пользователям возможность составлять из команд работающие программы. «Семантика представляет собой строительные блоки, из которых создаётся программа на С++, а синтаксис — способ собрать эти блоки в единое целое.» [Советы]
►Что такое программа...26
Программа — это текстовый файл, содержащий последовательность команд, связанных между собой по законам грамматики С++. Этот файл называют исходным текстом ( возможно, потому, что он является началом всех наших страданий ). Исходный файл в С++ имеет расширение .СРР, так же как файлы Microsoft Word оканчиваются на .DOC или командные файлы MS DOS имеют окончание .ВАТ. Расширение .СРР всего лишь соглашение. Задача программирования — это написание такой последовательности команд, после преобразования которой в машинный язык можно получить программу, выполняющую наши желания. Такие машинно-исполнимые программы имеют расширение .ЕХЕ[ 1 ]. Процесс превращения программы С++ в исполнимую называется компиляцией или построением ( разница между этими понятиями поясняется в главе 22, "Разложение классов" ). Пока всё выглядит достаточно легко, не так ли? Но это лишь цветочки. Продолжим...►Как пишут программы...26
Для написания программы вам нужны две вещи: редактор для создания исходного .СРР-файла и программа ( транслятор ), которая преобразует исходный текст в понятный машине код — .ЕХЕ-файл, выполняющий ваши команды. Инструмент ( программа-транслятор ), осуществляющий такое превращение, называется компилятором. Современные инструменты разработки программ обычно совмещают в себе и компилятор и редактор — в единой среде разработки. После ввода текста программы для создания выполнимого файла нужно только щёлкнуть на кнопке. Одна из популярнейших сред разработки — Visual С++ .NET фирмы Microsoft. В ней можно скомпилировать и выполнить все программы, представленные в этой книге; однако не все из вас могут приобрести этот программный продукт из-за его довольно высокой стоимости ( кстати, многие в это не поверят, но далеко не все программисты работают в Windows — есть и другие операционные системы ). ( На сайте: http://www.visualstudio.com/ru-ru/downloads#d-express-windows-8 Вы можете скачать совершенно бесплатно Microsoft Visual Studio Express 2013 для Windows Desktop с небольшими ограничениями, но вполне пригодной для обучения и создания программ ( правда весит эта IDE 1 Gb, но готовые Release файлы - EXE файлы получаются в десятки и сотни раз меньше чем в Dev-C++ ) и выполняются они быстрее чем откомпилированные в Dev-C++. — Прим. рерайтера. ) ______________ 1Как правило, но, вообще говоря, это выполняется не всегда. — Прим.ред. _________________ 26 стр. Часть 1. Первое знакомство с С++«Существуют и общедоступные среды разработки программ С++. Одна из них — Dev-C++, которая имеется на прилагаемом компакт-диске, а самую последнюю версию вы сможете найти по адресу www.bloodshed.net.» [Диск] Множество свободно распространяющихся программ можно найти в Internet, некоторые из этих программ не совсем бесплатны — для их получения вы всё-таки должны будете внести небольшую сумму. За использование Dev-C++ вам не придётся ничего платить. Более подробно об условиях работы с этой средой вы можете узнать на упомянутом Web-узле. Все программы в этой книге тестировались с использованием Dev-C++ 4.9.8.0 , но они должны без проблем работать и с другими версиями среды разработки. Вы можете зайти на мой Web-узел www.stephendavis.com и познакомиться с последней информацией по этому вопросу. «Dev-C++ — это не какая-то урезанная и переполненная ошибками версия компилятора, разработанного непонятно кем. Это нормальная, полноценная среда программирования, поддерживающая стандарт С++ ( и способная скомпилировать все программы из данной книги, что для нас в настоящий момент самое важное ).» [Технические подробности] «Dev-C++ генерирует Windows-совместимые программы, но не является пакетом разработки программ для Windows в классическом понимании этого слова. Если я разгадал ваши тайные желания, то у вас нет другого выхода, кроме как приобрести коммерческий пакет наподобие Visual Studio.NET. Тем не менее, я настоятельно рекомендую сперва разобраться со всеми примерами из данной книги, до того как вы перейдёте к разработке программ для Windows.» [Атас!] Вам следует начать с установки Dev-C++, описанной в следующем разделе, и для практики скомпилировать свою первую программу, переводящую температуру в градусах Цельсия в температуру в градусах Фаренгейта. «Все программы в данной книге совместимы с Visual С++ .NET ( и С++-частью Visual Studio.NET, что по сути одно и то же ). Для инсталляции Visual С++ .NET воспользуйтесь поставляемой с этим пакетом документацией. Конечно, Visual С++ .NET и Dev-C++ отличаются, но не настолько, чтобы вы не смогли работать с одной средой, хорошо зная другую.» [Атас!]
►Инсталляция Dev-C++...27
На прилагаемом компакт-диске имеется инсталляционная программа Dev-C++. Это исполнимый файл, который находится в каталоге devcpp. Вот какие шаги следует выполнить для того, чтобы установить на своём компьютере Dev-C++. 1. Найдите на прилагаемом компакт-диске и запустите файл devcpp4980.ехе. • Двойной щелчок на этом файле запустит инсталляцию автоматически. Заметим, что 4980 означает номер версии. Так, если вы загрузите последнюю версию Dev-С++ из Web, имя файла может отличаться от указанного здесь. • Вы можете воспользоваться в Windows командой Start => Run, ввести в диалоговом окне Run x:\devcpp\devcpp4980 , где х — буква вашего дисковода компакт-дисков. • Установка Dev-C++ начинается с предупреждения ( рис. 1.1 ) о необходимости удалить старую версию Dev-C++, если таковая у вас установлена. ( Нехорошо, конечно, начинать знакомство с угроз, но это лучше, чем иметь неприятности потом... ) _______________ 27 стр. Глава 1. Написание вашей первой программыРис. 1.1. Перед установкой Dev-C++ вы должны удалить старую версию 2. Если у вас не установлена предыдущая версия Dev-C++, переходите прямо к п. 4 ; в противном случае прервите инсталляцию и переходите к следующему пункту. «Не удивляйтесь, если вы даже не слышали о Dev-C++, и тем более никогда не ставили эту среду на свой компьютер — это диалоговое окно не более чем напоминание.» [Советы] 3. Чтобы удалить старую версию, войдите в папку Dev-C++ и дважды щёлкните на файле uninstall.ехе. При этом запустится программа деинсталляции Dev-C++, которая удалит её с вашего компьютера, подготовив его к установке новой версии. 4. Прочтите лицензионное соглашение и щёлкните на кнопке <I Agree>, если оно не противоречит вашим жизненным принципам.
Если вы не согласитесь с лицензионным соглашением, установка Dev-C++ выполняться не будет. В противном случае вы увидите диалоговое окно, показанное на рис. 1.2, в котором вам предлагается выбрать опции установки Dev-C++. Предлагаемые по умолчанию опции вполне безобидны, надо только сделать два замечания. • Опция Mingw compiler system... должна быть включена. • Опция Associate С and С++ files to Dev-C++ означает, что при двойном щелчке на файле с расширением .срр будет автоматически запущена среда Dev-C++, а не какое-то иное приложение ( например, Visual С++ .NET). Отменить впоследствии такую привязку можно, но сложно. «Не включайте эту опцию, если у вас установлен Visual Studio .NET. Программы Dev-C++ и Visual Studio .NET вполне могут сосуществовать на одном компьютере, но связывать с Dev-C++ исходные файлы программ на С++ неразумно, тем более что вы всегда можете запустить именно Dev-C++, щёлкнув на файле .срр правой кнопкой мыши и выбрав из выпадающего меню команду Open with. Впрочем, лично я как раз предпочитаю использовать описанную опцию, хотя бы просто потому, что Dev-C++ загружается гораздо быстрее Visual Studio.» [Атас!] 5. Щёлкните на кнопке Next. Программа инсталляции спросит вас, куда именно устанавливать Dev-C++ ( рис. 1.3 ). 6. Согласитесь с предложенным каталогом С: \Dev-Cpp. «Не устанавливайте Dev-C++ в каталог \Program Files вместе с другими программами. Это связано с тем, что Dev-C++ плохо работает с каталогами, в имени которых есть пробелы. Так будет безопаснее.» [Атас!] _________________ 28 стр. Часть 1. Первое знакомство с С++
Рис. 1.2. Опции установки Dev-C++, предлагаемые по умолчанию Рис. 1.3. Размещение Dev-C++ на диске по умолчанию 7. Убедитесь, что на диске достаточно места. Хотя Dev-C++ занимает всего лишь около 45 Мбайт дискового пространства, лучше всё же убедиться, что эти 45 Мбайт на диске имеются. 8. Щёлкните на кнопке Install. _______________ 29 стр. Глава 1. Написание вашей первой программы
Сначала покажется, что ничего не происходит. Затем Dev-C++ будет копировать свои файлы в указанный вами каталог, абсолютно ничего не помещая в каталог Windows. Конечный результат показан на рис. 1.4.
Рис. 1.4. При инсталляции Dev-C++ на диск помещается много небольших файлов
По окончании инсталляции Dev-C++ выведет диалоговое окно, в котором спросит вас, следует ли установить Dev-C++ для всех пользователей вашего компьютера? Смысл в том, что если на вашем компьютере работает кто-то ещё, то разрешаете ли вы ему пользоваться установленной вами средой Dev-C++?
9. Щёлкните на кнопке Close для завершения инсталляции.
Перед вами откроется диалоговое окно первичных настроек среды, в котором самое интересное — выбор языка интерфейса среды ( выбор весьма богатый, включающий русский и украинский языки ).
Настройка русского языка
Запустите файл devcpp.exe Нажмите Tools => Environment Optinons => InterfaceВ <Language> выберите русский язык и нажмите <Ок>. Если выскочит окошко
то нажмите <Continue>. После этого — язык интерфейса русский .
Как настроить русский язык в консольных программах?
В консольных приложениях ( похожих на текстовый режим ) русские буквы выводятся к кодировке CP-866, а в оболочке Dev-C++ они набираются в кодировке CP-1251. Это значит, что вместо русских букв вы увидите «кракозябры». Чтобы этого не случилось, кодировку нужно исправить с помощью простой дополнительной программы. Сделайте следующее: 1. Найдите на диске программы gccrus.exe и g++rus.exe ( 193 Кб ). 2. Скопируйте программы gccrus.exe и g++rus.exe в папку C:\Dev-Cpp\bin ( если при установке оболочки вы указали другой каталог вместо стандартного C:\Dev-Cpp, скопируйте программы в его подкаталог bin ). 3. Запустите оболочку Dev-C++ и войдите в меню Сервис-Параметры компилятора. 4. Перейдите на вкладку Программа и исправьте названия двух первых программ так, как показано на рисунке.5. Теперь при выводе на экран можно смело использовать русские буквы, они будут «на лету» перекодироваться. Если Вы не захотите использовать программки gccrus.exe и g++rus.exe , то в рабочих программах пишите setlocale ( LC_ALL , ".1251" ) ;, а если установите программки gccrus.exe и g++rus.exe , то в рабочих программах не пишите setlocale ( LC_ALL , ".1251" ) ;. Если установите программки gccrus.exe и g++rus.exe и в рабочих программах напишите setlocale ( LC_ALL , ".1251" ) ;, то в консоли вместо кириллицы будут кракозябры. Выбирайте что-то одно.
Настройка Dev-C++...30
Теперь необходимо настроить среду. Выполните следующие шаги.• Выберите команду меню Tools => Compiler Options ( Сервис => Параметры компилятора ).
Изменить эти параметры можно в любой момент, но лучше сделать это сейчас, до начала работы.
10. Выберите в диалоговом окне вкладку Settings ( Настройки ).
11. Выберите в меню слева Code Generation ( Генерация кода ).
Убедитесь, что опция Enable Exception Handling ( Включить обработку исключений ) включена, как показано на рис. 1.5. ( Если она отключена, щёлкните на кнопке выпадающего списка справа и выберите Yes. ) _________________ 30 стр. Часть 1. Первое знакомство с С++
Рис. 1.5. Обработка исключений должна быть включена
12. Выберите в меню слева пункт Linker ( Компоновщик ) и убедитесь, что опция Generate Debugging Information ( Генерировать отладочную информацию ) включена.
На рис. 1.6 показано, как должно выглядеть при этом диалоговое окно параметров компилятора.
Рис. 1.6. Генерация отладочной информации должна быть включена
13. Щёлкните на кнопке ОК.
На этом инсталляция завершена ( все внесённые вами изменения сохранятся автоматически ).
СОВЕТ ДНЯ
!Знаете ли вы, что...
...вы не должны отключать данные советы?
Советы, представленные здесь дают вам недокументированную информацию, которая не может быть найдена нигде более. Если вы отключите их, и захотите увидеть их в будущем, выберите "Справка / Совет дня"...
!Знаете ли вы, что...
...вы можете использовать vUpdate для постоянного поддержания своей среды Dev-C++ обновлённой последними исправлениями ошибок и многими приятными возможностями?
Выберите "Сервис / Проверить обновления / Пакеты..."
!Знаете ли вы, что...
...возможность автоматического завершения кода может помочь вам увеличить производительность путём предложения всех команд, доступных в данном контексте?
Чтобы включить автоматическое завершение кода, войдите в "Сервис / Параметры редактора" и включите обзор классов и завершение кода.
!Знаете ли вы, что...
...Функция автоматического завершения кода срабатывает, когда вы вводите ".", " -> " или "::" в окне редактора, по истечении определённого времени?
Чтобы задать требуемый промежуток времени, войдите в "Сервис / Параметры редактора / Обзор классов / Завершение кода".
!Знаете ли вы, что...
...вы можете в любое время вызвать Функцию автоматического завершения кода нажатием "Ctrl+Пробел" в окне редактора?
( Попробуйте также нажать "Ctrl+Shift+Пробел", когда курсор находится между скобками, где перечислены аргументы Функции... )
!Знаете ли вы, что...
...Shift + щелчок мышью на элементе обзора классов даст вам объявление вместо реализации?
Конечно, для этих ( и многих других! ) Функций вы можете использовать контекстное меню...
!Знаете ли вы, что...
...вы можете добавлять собственные папки в окно обзора классов, чтобы в больших проектах было проще находить то, что вы ищете? Вы даже можете вкладывать папки друг в друга!
Простой щелчок правой кнопкой мыши в окне обзора классов вызовет контекстное меню...
!Знаете ли вы, что...
...информация о папках пользователя из окна обзора классов хранится в Файле "classfolders.dcf" в корневом каталоге вашего проекта?
Если что-то пойдёт неправильно и возникнет путаница, просто удалите этот файл и откройте заново свой проект!
!Знаете ли вы, что...
...окно обзора имеет два режима просмотра?
Один режим показывает все классы / члены / функции проекта, а другой показывает вам соответствующую информацию только для текущего редактируемого Файла.
Просто щёлкните правой кнопкой на окне обзора классов и выберите "Режим просмотра"...
!Знаете ли вы, что...
...вы можете задать, хотите ли вы открывать Файлы в редакторе одинарным или двойным щелчком в менеджере проекта?
Чтобы задать это, войдите в "Сервис / Параметры среды" и включите ( или отключите ) пункт "Открывать Файлы двойным щелчком в менеджере проекта"...
!Знаете ли вы, что...
...вы можете определить собственную папку в менеджере проектов ( только верхнего уровня ) для лучшей организации своих файлов?
Чтобы сделать это, щёлкните правой кнопкой на файле в менеджере проекта для вызова контекстного меню...
!Знаете ли вы, что...
...если вы создали собственные папки в менеджере проекта, вы можете перетаскивать файлы, чтобы переупорядочить их?
!Знаете ли вы, что...
...вы можете получить сведения о файле, над которым вы работаете?
Выберите "Файл / Свойства" и вы получите сведения о размере файла, числе строк, строчных комментариях, пустых строках и включаемых файлах!
!Знаете ли вы, что...
...вы можете сохранить свой проект как шаблон?
Выберите "Файл / Создать / Шаблон", это сохранит ваш проект как шаблон Dev-C++, и он будет доступен, когда вы выберете "Файл / Создать / Проект".
Этот способ даёт вам возможность начать кодирование, основываясь на личном вкусе!
!Знаете ли вы, что...
...вы можете импортировать в Dev-C++ свои проекты MS Visual С++
Достаточно выбрать "Файл / Импорт / Импорт проекта MS Visual С++". Возможно, вам придётся немного поколдовать над параметрами проекта после его импорта, но всё-таки, оно работает!
!Знаете ли вы, что...
...вы можете импортировать исходный Файл или весь проект в HTML или RTF? Этот способ даёт возможность опубликовать свои исходники на веб-сайте и сделать доступными их всему миру!
Просто щёлкните на пункте "Файл / Экспорт" и выберите метод экспорта...
!Знаете ли вы, что...
...вы можете закомментировать / раскомментировать набор строк, выделив их, а затем щёлкнуть "Правка / Закомментировать( Раскомментировать )"?
!Знаете ли вы, что...
...вы можете увеличить / уменьшить отступ набора строк, выделив его, и щёлкнуть по пункту "Правка / Увеличить ( Уменьшить отступ )"?
!Знаете ли вы, что...
...вы можете использовать закладки в редакторе для ускоренного перемещения по коду?
Установите или снимите закладку щелчком на "Правка / Переключить закладку" и выборе номера закладки. Переход к закладке — щелчок на "Правка / Перейти к закладке" и выбор номера закладки.
!Знаете ли вы, что...
...в меню "Поиск" существует мощная команда "Перейти к функции"?
Она выдаёт список всех функций файла, и при вводе части имени функции список фильтруется. Нажмите Enter, и вы немедленно перейдёте к данной функции! Примечание: обзор классов должен быть включен...
►Создание первой программы...31
Сейчас вы приступите к созданию своей первой программы на С++. Для этого потребуется ввести программный код в файл Conversion-рус.cpp, а потом скомпилировать его в выполнимую программу. _______________ 31 стр. Глава 1. Написание вашей первой программыВведение кода...32
При создании любой программы на С++ первым шагом становится введение команд языка с помощью текстового редактора. В среде Dev-C++ имеется встроенный редактор, разработанный специально для создания программ на С++.1. Выберите в Windows команду Starts => Programs => Bloodshed Dev-C++ для запуска среды.
Интерфейс Dev-C++ выглядит так же, как и у большинства других программ для Windows.
«При запуске Dev-C++ вам пришлось немало поработать мышкой, продираясь через все эти меню. Для упрощения этого процесса можно создать ярлык для Dev-С++ на рабочем столе. Для этого дважды щёлкните на пиктограмме My Computer, затем в открывшемся окне — на диске С:, а затем — папке Dev-Cpp. После этого щёлкните на файле devcpp.ехе правой кнопкой мыши и выберите из выпадающего меню Create Shortcut. Затем перетащите созданный ярлык на рабочий стол ( или в какое-то другое легкодоступное место ). Теперь вы можете запускать Dev-С++ двойным щелчком на ярлыке.» [Советы] _________________ 32 стр. Часть 1. Первое знакомство с С++
2. Выберите в меню Dev-C++ File => New => Source File ( Файл => Создать => Исходный файл ).
Dev-C++ откроет пустое окно, в котором вы можете ввести ваш код. Не беспокойтесь, если вы пока что не понимаете, что вводите — назначение этой книги как раз и заключается в том, чтобы всё непонятное стало простым и ясным.
3. Введите представленную ниже программу в точности так, как она приведена далее в книге.
«Пусть количество отступов и пробелов вас не волнует: не так важно, сколько пробелов вы поставили перед началом строки или между соседними словами. Однако С++ весьма чувствителен к другому: надо следить, чтобы все команды набирались в нижнем регистре[ 2 ].» [Советы] «Вы можете просто воспользоваться файлом Conversion.срр из каталога \Cpp_Programs\Chap01 или файлом Conversion-рус.срр из каталога \Cpp_Programs\Chap01 на прилагаемом компакт-диске.» [Советы] // /* Conversion-рус.срр. Программа для преобразования градусов Цельсия в градусы Фаренгейта: Fahrenheit = Celsius*( 212 - 32 )/100 + 32 */ //
#include <cstdio> #include <cstdlib> #include <iostream>
using namespace std ;
int main( int nNumberofArgs , char* pszArgs[ ] ) { /* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */ setlocale ( LC_ALL , ".1251" ) ;
/* Введите температуру в градусах Цельсия */ int celsius ; cout << "Введите температуру по Цельсию: " ; cin >> celsius ; /* строка номер 15 */
/* для приведённой формулы преобразования вычислим преобразующий множитель */ int factor ; factor = 212 - 32 ;
/* используем вычисленный множитель для преобразования градусов Цельсия в градусы Фаренгейта */ int fahrenheit ; fahrenheit = factor * celsius / 100 + 32 ;
/* вывод результатов */ cout << "Температура по Фаренгейту:" ; cout << fahrenheit << endl ;
/* Пауза для того, чтобы посмотреть на результат работы программы, ожидание перед завершением программы пока пользователь не прочтёт результат и нажмёт клавишу */ system( "PAUSE" ) ; return 0 ; } _____________ 2В С++ отнюдь не запрещается использование символов в верхнем регистре — просто язык чувствителен к регистру, а это значит, что int main и Int Main, например, означают совершенно разные вещи. — Прим. ред. _______________ 33 стр. Глава 1. Написание вашей первой программы
4. После ввода этого кода выберите команду меню File => Save As ( Файл => Сохранить как... ) и сохраните файл.
Хотя это вам может показаться и не очень впечатляющим, но только что вы создали вашу первую программу на С++! «При работе над книгой я создал каталог \Cpp_Programs, а в нём — каталог Chap01, и сохранил в нём созданный файл под именем Conversion.срр ( Conversion-рус.срр ). Обращаю ваше внимание на то, что Dev-C++ некорректно работает с дисковыми именами, в которых имеется пробел ( хорошо хоть, что Dev-C++ в состоянии работать с именами длиннее 8 символов — спасибо и за это... ).» [Советы]
Построение вашей программы...34
После сохранения на диске исходного файла Conversion.срр самое время сгенерировать выполняемый машинный код. Для этого нужно выбрать команду меню Execute => Compile ( Выполнить => Скомпилировать ) или просто нажать клавиши <Ctrl+F9> ( можно также щёлкнуть на соответствующей пиктограмме в полосе инструментов ). Dev-C++ откроет окно компиляции. Сначала ничего не происходит ( компилятор думает :) ), но через некоторое время, если программа была введена правильно, вы увидите окно, показанное на рис. 1.7. Слово Done в переводе с английского означает сделанный, в нашем случае откомпилированный ( Прим.- рер. ). Рис. 1.7. Сообщение о компиляции программы без ошибокЕсли компилятор находит ошибки в программе — а это такое же обычное дело, как снег на Чукотке — он сообщает об этом программисту. Вы обязательно столкнётесь с многочисленными предупреждениями и сообщениями об ошибках, возможно, даже при работе с простенькой программой Conversion.срр или Conversion-рус.срр . Чтобы продемонстрировать процесс исправления ошибок, изменим оператор в 15 строке cin >> celsius ; на cin >>> celsius ;. Это нарушение кажется совсем невинным — и вы, и я вскоре бы о нём забыли. Но при компиляции открывается вкладка Compiler ( Компилятор ) с сообщением об ошибке ( рис. 1.8 ). Для того чтобы исправить ошибку, просто удалите лишний символ ">" и скомпилируйте программу заново. _________________ 34 стр. Часть 1. Первое знакомство с С++
Рис. 1.8. Сообщение об ошибке в программе
Почему С++ так требователен...35
Как видим, компилятор смог определить строку, которую мы испортили в предыдущем примере. Однако если он нашёл ошибку, то почему же он сам не решит эту проблему — и дело с концом? Ответ достаточно прост. Хотя в данном случае Dev-C++ считает, что мы всего лишь допустили опечатку при вводе символов ">>", полностью положиться на его интуицию нельзя. Ведь правильной командой в действительности может оказаться совершенно другая, не имеющая никакого отношения к ошибочной команде. Если бы компилятор исправлял ошибки так, как считает нужным, то он скрывал бы от разработчиков многие реальные проблемы. Требуется много усилий и времени, чтобы найти скрытую в программе ошибку. Намного лучше позволить найти эту ошибку компилятору. Мы тратим наше драгоценное время, создавая ошибки. Но зачем же расходовать его ещё и на их поиск, если компилятор может выловить огрехи, не тратя нашего времени. Каким, по вашему мнению, будет мой выбор?.. «Термин parse в описании ошибки обозначает, что ошибка была найдена при проведении синтаксического анализа команд С++.» [Советы] _______________ 35 стр. Глава 1. Написание вашей первой программы►Выполнение программы...36
Пришло время испытания вашего нового творения. Для выполнения программы нужно запустить файл Conversion-рус.exe или Conversion.exe и обеспечить его входными данными. Полученный результат можно использовать для анализа. Чтобы запустить программу из среды Dev-C++, нужно выбрать команду меню Ехесute => Run ( Выполнить => Выполнить ) или нажать <Ctrl+F10>. При этом откроется окно, в котором вам предложат ввести температуру по Цельсию. Для проверки правильности внесите какую-то заранее известную температуру, например 100°. После нажатия клавиши <Enter> программа возвращает эквивалентную температуру по Фаренгейту, т.е. 212°:Введите температуру по Цельсию: 100 Температура по Фаренгейту: 212 Для продолжения нажмите любую клавишу...( Press any key to continue... )
Сообщение Для продолжения нажмите любую клавишу... ( Press any key to continue... ) позволяет вам увидеть результаты работы программы перед тем, как окно будет закрыто. Нажмите <Enter>, и окно ( вместе с его содержимым ) исчезнет с экрана. ! ! ! ! ! ! ! ! ! ! ! Поздравляю! Вы только что ввели, скомпилировали и запустили свою первую программу на языке программирования С++. ! ! ! ! ! ! ! ! ! ! !
Dev-C++ — это не Windows
Заметьте, что пакет Dev-C++ не предназначен для разработки программ для Windows. Написать Windows-приложение с помощью Dev-C++ теоретически можно, но весьма непросто. Windows-программы имеют ярко выраженный визуально-ориентированный оконный интерфейс. A Conversion.ехе является 32-битовой программой, которая выполняется в среде Windows, но Windows-программой в визуальном смысле её не назовёшь. Если вы не знаете, чем 32-битовая программа отличается от 16-битовых, не беспокойтесь об этом. Как уже отмечалось, эта книга не о написании программ для Windows. Программы, разработанные нами в данной книге, имеют интерфейс командной строки и работают в окне MS DOS. Начинающим Windows-программистам огорчаться не следует: ваше время не пропадёт зря. Изучение С++ совершенно необходимо как предварительное условие для написания Windows-программ.Помощь в Dev-C++
Dev-C++ обеспечивает разработчиков системой помощи, доступной посредством команды меню Help( Справка ). В системе помощи представлена информация по различным аспектам работы в Dev-C++, но, пожалуй, наиболее существенной можно назвать справку по самому языку программирования С[ 3 ].►Разбор программ...36
Хотя разбор программы, написанной другим разработчиком, — занятие не самое впечатляющее, но на этапе вашего становления как программиста делать это очень даже полезно. Программы чем-то похожи на автомобили. Все автомобили в принципе одинаковы, но между французскими и английскими автомобилями, при всей принципиальной схожести, всё же имеется масса отличий. Хотя построены они по одному шаблону — руль перед вами, сиденье под вами... Так и программы на С++ следуют общему шаблону, который проявляется даже в первой скомпилированной нами простейшей программе. _______________ 3К сожалению, недостаточно полная, и только на английском языке. — Прим. ред. _________________ 36 стр. Часть 1. Первое знакомство с С++Определение структуры программ С++...37
Каждая программа, написанная с использованием материала этой книги, в своей основе будет иметь одну и ту же базовую схему:/* Template.срр. ШАБЛОН. Это многострочные комментарии, которые компьютер игнорирует. */
// Или такие // комментарии, // однострочные. // Template.срр // ШАБЛОН. // Это // комментарии, // которые // компьютер // игнорирует.
#include <cstdio> #include <cstdlib> #include<iostream>
using namespace std ;
int main( int nNumberofArgs , char* pzArgs[ ] ) { /* ...здесь записывается код программы... */
/* Следующая строка нужна только для демонстрационных целей, чтобы пользователь мог посмотреть на вывод программы перед тем, как закроется её окно */
system( "pause" ) ; return 0 ; }
Если не вникать в детали, то выполнение программы начинается с кода, который помещён между открывающей и закрывающей скобками, следующими за строкой с main( ). «Этот код вы найдёте на прилагаемом компакт-диске в каталоге Cpp_Programs в файле Template.срр.» [Диск]
Использование в исходном коде комментариев...37
Нетрудно заметить, что первые несколько строк Conversion.срр являются обычным текстом. Значит, или компилятор Dev-C++ оказался более понятливым, чем я его представил, или — что вероятнее всего — этот код предназначается для человеческих глаз. Оформленные таким образом строки называют комментариями. Чаще всего в комментариях программист объясняет конкретные действия, которые он собирается реализовать в следующем фрагменте кода. Компилятор комментарии игнорирует. Комментарии в С++ начинаются с двойной косой черты ( // ) и заканчиваются переходом на новую строку. В их тексте можно использовать любые символы. Длина комментариев не ограничена, но, так как желательно, чтобы они не превосходили размеров экрана, обычно придерживаются нормы не более 80 символов. Во времена печатных машинок перевод каретки означал начало новой строки. Но ввод с клавиатуры — это не печатание на машинке. В этом случае новая строка является символом, который завершает текущую командную строку. «Допустима и другая форма комментариев, при которой игнорируется всё, что /* заключается в такие скобки */, однако эта форма комментариев в С++ почти не используется.» [Атас!] _______________ 37 стр. Глава 1. Написание вашей первой программыПрисутствие в программах игнорируемых компьютером команд С++ ( или любого другого языка программирования ) может показаться странным. Однако все компьютерные языки предлагают те или иные способы оформления комментариев. Объяснения программиста раскрывают ход его мыслей при написании программного кода. Ведь замыслы программиста могут быть совсем неочевидными для людей, которые захотят воспользоваться программой или её модифицировать. Да и сам автор программы, взглянув на неё через месяц, не всегда сможет вспомнить её суть.
Использование инструкций в программах...38
Все программы С++ в своей основе имеют то, что называют инструкциями. В этом разделе рассмотрим такие из них, которые составляют остов программы Convert. Инструкция — это команда, которую понимает компилятор. Все инструкции, кроме комментариев, оканчиваются точкой с запятой ( для комментариев на то есть свои причины, но всё же иногда это неудобно; мне кажется, что во избежание путаницы после комментариев точку с запятой следовало бы ставить тоже ). При запуске программы первой выполняется инструкция, находящаяся после открывающей фигурной скобки, а затем поочередно выполняются и все остальные инструкции. Просмотрев программу, можно увидеть, что пробелы, символы табуляции и новой строки появляются на протяжении всей программы. Переход на новую строку осуществляется практически после каждой инструкции. Все эти символы называют непечатаемыми, так как на экране монитора их увидеть нельзя. «Для повышения удобочитаемости допускается добавление символов пробела в любом месте программы ( но не внутри слов! ).» [Советы] Игнорируя пропуски, язык С++ учитывает регистр. Например, переменные fullspeed и FullSpeed, с его точки зрения, не имеют между собой ничего общего.Объявления...38
Строка int сelsius ; является инструкцией объявления. Объявление — это инструкция, которая определяет переменную. Переменная — это контейнер, в котором хранятся значения некоторого типа. Переменная может содержать числовые или символьные значения. Термин "переменная" был заимствован из алгебры, где он является стереотипным для следующих выражений:х = 10 у = 3 * х
Во втором выражении переменной у присваивается значение, определяемое формулой 3 * х. Но что такое х? Переменная х играет роль контейнера для хранения каких-то значений. В нашем случае значением х является 10 , но с таким же успехом можно определить значение х равным 20 , 30 или -1. Вторая формула имеет смысл при любом числовом значении х. В алгебре можно начать работу непосредственно с выражения наподобие х = 10. Программируя на С++, переменную х перед её использованием необходимо объявить. В С++ переменная имеет тип и имя. Переменная, определённая в строке 15, называется celsius. Согласно объявлению она целочисленная ( подобные названия типов, наверное, имеют целью развить у программистов ассоциативное мышление — тип int представляет собой сокращённое слово integer ). _________________ 38 стр. Часть 1. Первое знакомство с С++
Для С++ имя переменной не имеет никакого специфического значения. Имя должно начинаться с букв английского алфавита A-Z или a-z[ 4 ]. Остальные символы могут быть буквами, цифрами от 0 до 9 или подчёркивающей чертой ( _ ). Имена переменных могут быть настолько длинными, насколько это вам удобно. «Существует негласная договорённость о том, что имена переменных должны начинаться со строчной буквы. Каждое слово внутри имени переменной пишется с прописной буквы, например myVariable.» [Советы] «Старайтесь давать переменным короткие, но наглядные имена. Избегайте таких имён , как х, потому что они не несут никакого смысла. Примером достаточно наглядного имени переменной может служить lengthOfLineSegment.» [Советы]
Генерирование вывода...39
Строки, начинающиеся с cout и сin, называют инструкциями ввода-вывода, или сокращённо I/O ( input/output ) ( как и все инженеры, программисты любят сокращения и аббревиатуры ). Первая инструкция I/O выводит фразу "Введите температуру по Цельсию" в cout ( произносится как "си-аут" — сокращённо от console output ). В С++ cout — это имя стандартного устройства вывода. В нашем случае таким устройством является монитор. В следующей строке всё происходит с точностью до наоборот. Со стандартного устройства ввода мы получаем значение и сохраняем его в целой переменной Celsius. Стандартным устройством ввода для С++ в данном случае служит клавиатура. Этот процесс является аналогом упоминаемой выше алгебраической формулы х = 10 в С++. Программа будет считать значением celsius любое целое число, введённое пользователем.►Вычисление выражений...39
Почти все программы выполняют вычисления того или иного вида. В С++ выражением называется инструкция, которая выполняет какие-либо вычисления. Иными словами, выражение — это инструкция, которая имеет значение. Команда, генерирующая это значение, называется оператором. Например, в программе Conversion можно назвать "вычисляющим выражением" совокупность строк с объявлением переменной factor и определением её значения как результата вычислений. Эта команда вычисляет разность между 212 и 32. В данном примере оператором является знак "минус" ( "-" ), а выражением — "212-32".Сохранение результатов выражения...39
Разговорный язык может быть далеко не однозначным. Яркий тому пример — слово равный. Оно может употребляться в значении "одинаковый" ( например, равные силы ), а может применяться в математике для построения выражений типа "у равен утроенному х". Чтобы избежать двусмысленности, программисты на С++ называют знак "=" оператором присвоения. Оператор присвоения сохраняет результат выражения, находящегося справа от "=", в переменной, записанной слева. Программисты говорят, что "переменной factor присвоено значение 212-32". __________ 4Имя может также начинаться с символа подчёркивания, хотя на практике это используется довольно редко. — Прим. ред. _______________ 39 стр. Глава 1. Написание вашей первой программы«Никогда не говорите "factor равно 212 минус 32". Такое приходится слышать от всяких ленивых типов, но мы-то с вами знаем, как говорить правильно!» [Атас!]
Обзор программы Convert продолжается...40
Второе выражение, представленное в Conversion.срр, несколько сложнее первого. В нём используются всем известные математические символы: " * " для умножения, " / " для деления, " + " для сложения. В этом случае, однако, вычисления выполняются не просто с константами, а с переменными. Значение переменной factor ( кстати, уже вычисленное ) умножается на значение переменной celsius ( которое было введено с клавиатуры ). Результат делится на 100 и к нему прибавляется 32. Результат всего выражения приводится к целому типу и присваивается переменной fahrenheit. Последние команды выводят строку "Температура по Фаренгейту:" и отображают значение переменной fahrenheit. _________________ 40 стр. Часть 1. Первое знакомство с С++
Глава 2. ПРЕМУДРОСТИ ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ...41
ОГЛАВЛЕНИЕ
В этой главе...
►Объявление переменных 41
►Объявление разных типов переменных 42
►Объявления типов переменных 45
►Логические выражения 48
►Выражения смешанного типа 48
Одним из основных в С++ является понятие переменной. Переменную можно представить как небольшую шкатулку, в которой хранятся вещи для дальнейшего многократного использования. Понятие переменной заимствовано из математики. Инструкция вида
х = 1
сохраняет значение 1 в переменной х. После такого присвоения математики могут использовать переменную х вместо константы 1, пока не изменят значение х на другое. В С++ переменные используются таким же образом. После присвоения х = 1 ; и до следующего изменения содержимого переменная х становится обозначением числа 1 в программе. При этом говорят, что значение х есть 1. К сожалению, в С++ возни с переменными несколько больше, чем в математике. Эта глава как раз и повествует о заботах, связанных с использованием переменных в С++.
►Объяление переменных...41
Все числа, с которыми работает С++, хранятся в небольших "ларцах", которые называются переменными. В математике с переменными обращаются достаточно свободно. Допускаются формулировки наподобиеУверен, вам не нужно объяснять, что такой способ задания переменных действительно однозначен. К сожалению, С++ не так сообразителен ( как я уже упоминал, компьютеры ну просто очень глупы! ). Прежде чем использовать в программе новую переменную, вы должны её объявить:
int х ; х = 10 ; int у ; у = 5 ;
_________________ 41 стр. Глава 2. Премудрости объявления переменных ...
Все права на текст принадлежат автору: Стефан Рэнди Дэвис.
Это короткий фрагмент для ознакомления с книгой.