- •1. Технологии программирования.
- •1.1 Введение.
- •1.2 Модульное программирование.
- •1.3 Нисходящее программирование.
- •1.4 Структурное программирование.
- •1.5 Понятия объекта, класса объектов.
- •1.6 Основные понятия объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм.
- •2.1.1 Общие сведения о программах, лексемах и алфавите языка
- •2.1.3. Идентификаторы и служебные слова
- •3. Константы: целые, вещественные (с плавающей точкой), перечислимые, символьные (литерные), строковые (строки или литерные строки)
- •4. Операции. Знаки операций. Унарные, бинарные и тернарные операции. Приоритеты операций.
- •4.1 Знаки операций
- •4.2 Унарные операции
- •4.3 Бинарные операции.
- •4.4 Приоритеты операций
- •5. Переменные. Определения и описания. Спецификатор typedef.
- •5.1 Переменные. Определения и описания.
- •5.2 Класс памяти
- •6. Базовые и производные типы данных. Массивы. Указатели, ссылки и адреса. Структуры. Поля битов. Объединения
- •6.1 Массивы
- •6.2 Указатели, ссылки и адреса объектов
- •6.3 Структуры
- •6.4 Поля битов
- •6.5 Объединения
- •7. Операторы
- •7.1 Оператор выражение
- •7.2 Пустой оператор
- •7.3 Составной оператор
- •7.4 Оператор if
- •If (выражение) оператор-1; [else оператор-2;]
- •7.5 Оператор switch
- •7.6 Оператор break
- •7.7 Оператор for
- •7.8 Оператор while
- •7.9 Оператор do while
- •7.10 Оператор continue
- •7.11 Оператор return
- •7.12 Оператор goto
- •8. Функции
- •8.1 Определения, описания и вызовы функций
- •8.2 Начальные (умалчиваемые) значения параметров.
- •8.3 Функции с переменным количеством параметров
- •8.4 Перегрузка функций.
- •8.5 Ссылки и параметры-ссылки.
- •8.6 Шаблоны функций.
- •Основы ооп
- •9.1 Тип данных - класс.
- •9.2 Доступность компонентов класса
- •9.3 Конструктор и деструктор
- •9.4 Компоненты-данные и компоненты-функции. Статические и константные компоненты класса
- •10. Указатели на компоненты класса
- •10.1 Указатели на компоненты- данные.
- •10.2 Указатели на компоненты- функции.
- •10.3 Указатель this
- •11. Друзья классов
- •11.1 Дружественная функция
- •11.2 Дружественный класс
- •12. Наследование
- •12.1 Определение производного класса.
- •12.2 Конструкторы и деструкторы производных классов
- •13. Полиморфизм
- •13.1 Виртуальные функции.
- •13.2 Абстрактные классы
- •14. Шаблоны классов
- •15. Перегрузка операций
- •15.1 Общие сведения о перегрузке стандартных операций
- •15.2 Перегрузка унарных операций
- •15.3 Перегрузка бинарных операций
- •15.5 Перегрузка операции вызова функции
- •15.6 Перегрузка операции присваивания
- •15.7 Основные правила перегрузки операций.
- •16. Обработка исключительных ситуаций
- •16.1 Операторы try, throw, catch
- •16.2 Универсальный обработчик исключений
- •17. Структура Windows-приложения
- •17.2 Структура каркасного Windows-приложения
- •17.3 Главная функция WinMain()
- •17.4 Сообщения Windows
- •17.5 Класс окна. Регистрация и его характеристики
- •17.6 Создание и показ окна
- •17.7 Цикл обработки сообщений
- •17.8 Оконная функция
- •17.9 Завершение выполнения приложения
- •18. Препроцессор
- •18.1 Общие пpеобpазования
- •18.2 Директивы Препроцессора
- •18.3 Подключаемые файлы
- •18.4. Директива '#include'.
- •18.5 Однократно подключаемые файлы
- •18.6 Макросы
- •18.7 Стрингификация
- •18.8 Объединение
- •18.9 Удаление макросов
- •18.10 Условия
- •19. Разработка Windows приложений с использованием библиотеки классов mfc (microsoft foundation class library)
- •19.1 Некоторые сведения о программировании Windows-приложений
- •19.2 Преимущества использования mfc
- •19.4 Библиотека mfc
- •20. Простейшие mfc-приложения
- •20.1 Приложение без главного окна
- •20.2 Приложение с главным окном
- •20.3 Обработка окном сообщений
2.1.1 Общие сведения о программах, лексемах и алфавите языка
Следуя классикам, начнем с примера программы, выводящей на экран фразу "Hello, World!"
// HELLO.CPP - имя файла с программой
#include <iostream.h>
void main() {
cout << "\nHello, World!\n";
}
Основная программная единица на языке Си++ - это текстовый файл с названием <имя>.срр, где cpp - принятое расширение для программ на Си++, а имя выбирается достаточно произвольно. Для удобства ссылок и сопоставления программ с их внешними именами целесообразно помещать в начале текста каждой программы строку комментария с именем файла, в котором она находится. Текстовый файл с программой на Си++ вначале обрабатывает препроцессор, который распознает команды (директивы) препроцессора (каждая такая команда начинается с символа '#') и выполняет их. В приведенной выше программе использована препроцессорная команда include <имя вставляемого файла>
Выполняя препроцессорные директивы, препроцессор изменяет исходный текст программы. Команда <include> вставляет в программу заранее подготовленные тексты из включаемых файлов. Сформированный таким образом измененный текст программы поступает на компиляцию. Компилятор, во-первых, выделяет из поступившего к нему текста программы лексические элементы, т.е. лексемы, а затем на основе грамматики языка распознает смысловые конструкции языка (выражения, определения, описания, операторы и т.д.), построенные из этих лексем. Фазы работы компилятора здесь рассматривать нет необходимости. Важно только отметить, что в результате работы компилятора формируется объектный модуль программы.
Компилятор, выполняя лексический анализ текста программы на языке Си++, для распознавания начала и (или) конца отдельных лексем использует пробельные разделители. К пробельным разделителям относятся собственно символы пробелов, символы табуляции, символы перехода на новую строку. Кроме того, к пробельным разделителям относятся комментарии.
В языке Си++ есть два способа задания комментариев. Традиционный способ (ведущий свое происхождение от многих предшествующих языков, например, ПЛ/1, Си и т.д.) определяет комментарий как последовательность символов, ограниченную слева парой символов /*, а справа - парой символов */. Между этими граничными парами может размещаться почти любой текст, в котором разрешено использовать не только символы из алфавита языка Си++, но и другие символы (например, русские буквы):
/* Это комментарий */
ANSI-стандартом запрещено вкладывать комментарии друг в друга, однако многие компиляторы предусматривают режим, допускающий вложение комментариев.
Второй способ (введенный в Си++) определяет комментарий как последовательность символов, началом которой служат символы //, а концом - код перехода на новую строку. Таким образом, однострочный комментарий имеет вид:
// Это однострочный комментарий, специфичный для языка Си++
2.1.2. Алфавит и лексемы языка СИ++.
В алфавит языка Си++ входят
прописные и строчные буквы латинского алфавита;
цифры 0, 1, 2, 3, 4, 5, 6 7, 8, 9;
специальные знаки: " { } , | [ ] ( ) + - / % \ ; ' : ? < = > _ ! & # ~ ^ . *
Из символов алфавита формируются лексемы языка:
идентификаторы;
ключевые (служебные, иначе зарезервированные) слова;
константы;
знаки операций;
разделители (знаки пунктуации).