- •Предисловие
- •Глава 1. Основные понятия
- •1.1. Элементы языка программирования
- •1.2. Процесс создания программы
- •1.3. Первая программа
- •1.4. Состав программы
- •Глава 2. Средства разработки на C++
- •2.1. Системы Turbo C++ 3.0/Borland C++ 3.1
- •2.2. Система C++ Builder
- •Глава 3. Работа с числовыми данными
- •3.1. Целые типы
- •3.2. Числа с плавающей точкой
- •3.3. Ввод и вывод чисел
- •3.4. Логический тип и логические операции
- •3.5. Математические функции
- •Глава 4. Операторы. Ключевые слова
- •4.1. Операторы
- •4.2. Приоритеты операторов
- •4.3. Ключевые слова
- •4.4. Структура программы
- •4.5. Константы
- •Задачи - . Простейшие вычисления
- •Глава 5. Управление и циклы
- •5.1. Условный оператор
- •5.2. Операторы цикла
- •5.3. Переключатель
- •5.4. Операторы break и continue
- •Задачи -. Выбор и циклы
- •Глава 6. Массивы
- •6.1. Одномерные массивы
- •6.2. Двумерные массивы
- •Задачи -. Одно- и двумерные массивы
- •Глава 7. Функции
- •7.1. Определение функции
- •7.2. Формальные параметры и фактические аргументы
- •7.3. Автоматические и статические переменные
- •7.4. Прототипы функций
- •7.5. Массивы как аргументы функций
- •7.6. Внешние переменные
- •7.7. Рекурсия
- •7.8. Перегруженные имена функций
- •7.9. Аргументы функций по умолчанию
- •Задачи -. Функции
- •Глава 8. Символы и строки
- •8.1. Символы
- •8.2. Строки символов
- •Задачи -. Символы и строки
- •Глава 9. Препроцессор
- •9.1. Директивы препроцессора
- •9.2. Макросы
- •Задачи -. Макросы
- •Глава 10. Указатели и ссылки
- •10.1. Указатели и адреса
- •10.2. Указатели и массивы
- •10.3. Адресная арифметика
- •10.4. Символьные указатели
- •10.5. Массивы указателей
- •10.6. Указатели на функции
- •10.7. Ссылки
- •10.8. Операторы new и delete
- •Задачи -. Указатели и ссылки
- •Глава 11. О файлах и командной строке
- •11.1. Знакомство с файлами
- •11.2. Командная строка
- •11.3. Перенаправление стандартного ввода и вывода на файл
- •11.4. Аргументы командной строки
- •Задачи -. Файлы и командная строка
- •Глава 12. Работа с экраном дисплея
- •12.1. Текстовый режим
- •12.2. Графический режим
- •Задачи -. Работа с экраном
- •Глава 13. Внутреннее представление чисел
- •13.1. Двоичная система счисления
- •13.2. Беззнаковые целые
- •13.3. Двоичный дополнительный код
- •13.4. Двоичный код с избытком
- •13.5. Побитовые операторы
- •13.6. Дробные числа в двоичной системе
- •13.7. Внутреннее представление плавающих типов
- •13.8. Преобразование типов
- •Задачи -. Побитовые операторы
- •Глава 14. Структуры, перечисления, объединения
- •14.1. Объявление структур
- •14.2. Структуры и функции
- •14.3. Указатели на структуры
- •14.4. Массивы структур
- •14.5. Перечисления
- •14.6. Объединения
- •14.7. Битовые поля
- •14.8. О бинарных файлах
- •Задачи -. Структуры
- •Глава 15. Классы
- •15.1. Структуры в C++. Инкапсуляция
- •15.2. Встроенные функции
- •15.3. Классы. Скрытие данных
- •15.4. Конструкторы
- •15.5. Статические члены класса
- •15.6. Друзья класса
- •15.7. Копирование объектов класса
- •15.8. Управление доступом
- •15.9. Ссылка на себя
- •15.10. Деструкторы
- •Задачи -. Работа с классами
- •Глава 16. Программы из нескольких файлов
- •16.1. Работа с проектами
- •16.2. Область действия имен
- •16.3. Заголовочные файлы
- •16.4. Пространства имен
- •Задачи -. Работа со стеком
- •Глава 17. Перегрузка операторов
- •17.1. Правила перегрузки операторов
- •Задачи -. Перегрузка операторов
- •Глава 18. Конструктор копирования и оператор присваивания
- •18.1. Проблемы при копировании
- •Задачи -. Конструктор копирования
- •Глава 19. Ввод и вывод
- •19.1. Вывод
- •19.2. Ввод
- •19.3. Ввод и вывод определяемых пользователем типов
- •19.4. Работа с файлами
- •Глава 20. Взаимоотношения классов
- •20.1. Объекты как члены класса
- •20.2. Конструкторы встроенных типов
- •20.3. Наследование
- •20.4. Виртуальные функции
- •20.5. Абстрактные классы
- •20.6. Совместимость типов
- •20.7. Множественное наследование
- •Задачи -. Наследование классов
- •Глава 21. Шаблоны, исключения
- •21.1. Шаблоны
- •21.2. Шаблоны функций
- •21.3. Классы и шаблоны
- •21.4. Обработка исключений
- •21.5. Стандартная библиотека шаблонов
- •Литература
- •Предметный указатель
14
Глава 1. Основные понятия
1.1. Элементы языка программирования
Любой язык программирования представляет собой систему обозначений для записи последовательности действий, которые следует выполнены над данными. Текст программы на языке программирования состоит из основных элементов, соединенных по синтаксическим правилам, которые определяют допустимые комбинации элементов.
Алфавит
Программа на языке программирования записывается с помощью символов, образующих алфавит языка. Алфавит включает:
большие латинские буквы от A до Z малые латинские буквы от a до z цифры от 0 до 9 знаки препинания: , . ; : ! ? скобки: ( ) [ ] { }
знаки математических операций: + - * / < > = специальные символы:
\(обратная наклонная черта) ~(волна или тильда) &(амперсант)
#(решетка или диез)
’(апостроф или одиночная кавычка)
”(двойная кавычка) ^(стрелка)
%(процент)
_(знак подчеркивания)
Большие и малые буквы считаются различными. Знак подчеркивания считается буквой. Русские буквы нельзя использовать в предложениях языка C++, их можно применять в комментариях и в строках символов, заключенных в двойные кавычки, а также как одиночные символы, заключенные в апострофы.
Лексемы
Текст программы представляет собой последовательность лексем. Лексема – это фрагмент программы, имеющий самостоятельное
значение. Различают шесть типов лексем: ключевые слова,
Основные понятия 15
идентификаторы, константы, строки, знаки препинания и знаки операторов.
Ключевое слово – это лексема, имеющая некоторое предопределенное значение, например, ключевое слово int указывает, что величина, перед которой оно стоит, является целым числом, а ключевое слово for используется при организации циклов. Ключевые слова нельзя использовать для каких-либо других целей.
Идентификатор – это лексема, используемая как имя объекта программы (переменной, функции, класса). Идентификатор – это последовательность букв и цифр, начинающаяся с буквы. Например, в строку программы
int x0;
входят три лексемы: ключевое слово int, имя переменной целого типа x0 и знак препинания (;), который завершает данную инструкцию.
Константа – это лексема, задающая в программе конкретное значение. Числовые константы – это конкретные целые или дробные числа, записываемые по обычным правилам записи чисел, например, 123, 32.1, 3.21e2. Символьные константы ограничиваются апострофами, они представляют в программе одиночные символы, например, ’a’, ’A’, ’0’, ’1’. Важно понимать, что ’0’ это символ цифры нуль, а не число нуль.
Строка |
символов – это |
последовательность |
произвольных |
символов, |
заключенная в |
двойные кавычки, |
например, |
”Строка символов”, ”String of characters”.
К знакам препинания в C++ относятся два символа: (;) (точка с запятой) и (,) (запятая), служащие для разделения лексем. Символом (;) оканчивается любое предложение (инструкция) языка. Запятая разделяет переменные при их объявлении, аргументы функций. В некоторых случаях запятая является не только чистым знаком препинания, но и оператором. Другие символы (. : ? !), которые в естественных языках являются знаками препинания, в C++ обозначают операторы. Кроме знаков препинания, разделителями лексем являются пробелы и знаки операторов.
Термином оператор в языке C++ обозначают действие, которое следует выполнить над данными, например, оператор сложения чисел (+), оператор умножения чисел (*), оператор логического отрицания (!).
Выражения
В ходе работы программы могут вычисляться значения выражений. Выражения образуются по правилам языка программирования. В состав выражений могут входить переменные, соединенные знаками операторов и другие выражения.
16 1
Переменные хранят данные, которые обрабатываются в процессе работы программы. Для обозначения переменных используются идентификаторы. Каждая переменная имеет определенный тип, например, целый, символьный и т.д.
Значение выражения можно присвоить какой-либо переменной или использовать в дальнейших вычислениях. Выражения в программах подобны выражениям в математике. С помощью круглых скобок можно определять порядок проведения вычислений. Например, если a, b, c, d – это какие-то переменные программы, то допустима следующая инструкция:
d = (a + b) * c;
Здесь можно выделить три выражения: сумма a и b, произведение этой суммы на c и выражение присваивания, в результате которого d получает новое значение. Подчеркнем, что присваивание, обозначаемое знаком =, также является выражением, значение которого равно левому операнду, в данном случае d. Выражения присваивания можно использовать в других выражениях.
Функции
Функция – это подпрограмма, имеющая собственное имя и вызываемая для выполнения по этому имени. Обычно программа на языке C++ состоит из нескольких функций, каждая из которых решает отдельную самостоятельную часть общей задачи.
Каждая программа должна иметь в своем составе функцию с именем main, которая, впрочем, может быть единственной функцией программы. Вычисления в программе начинаются именно с функции
main.
Комментарии
Программы на языке C++ могут содержать комментарии, которые никак не влияют на вычисления и служат для пояснения хода работы программы. Комментарии предназначаются не компьютеру, а человеку, который будет читать программу, в том числе и ее автору. В комментариях допустимо использование любых символов, в том числе и русских букв.
Возможны два вида комментариев. Комментарии, занимающие одну строку, начинаются двумя символами наклонной черты // и оканчиваются концом строки. Текст, окаймленный знаками /* и */, также является комментарием. Такой комментарий может быть многострочным.
Основные понятия 17
Начинающие программисты, как правило, преувеличивают возможности своей памяти, считая, что написанное сегодня, они легко могут понять в будущем и бывают разочарованы, когда не могут этого сделать. Поэтому комментарии надо писать сразу же после написания фрагмента кода, то есть в тот момент, когда этот код наиболее понятен.
Обязательными являются комментарии, поясняющие назначение функций, переменных, ключевые места программы.
1.2. Процесс создания программы
Программа, написанная на языке программирования, называется исходной. В языке C++ исходная программа может состоять из нескольких файлов двух видов: с расширениями .cpp и с расширениями
.h. В файлы с расширением .h, которые называются заголовочными, помещаются фрагменты программы, которые обычно вставляют в
Текст исходной программы на языке С++
Препроцессор
Преобразованный текст программы на языке С++
Компилятор
Программа в машинных командах (объектный код)
Редактор связей
Рабочая программа
другие файлы.
Рис.1. Процесс создания программы
Чтобы исходную программу можно было выполнить, ее нужно перевести на язык машинных команд. Готовая к выполнению программа на языке машинных команд называется рабочей. Схема преобразования исходной программы в рабочую показана на рис.2.
Препроцессор осуществляет предварительную обработку исходного текста в соответствии с включенными в него директивами, например,