
- •Предисловие
- •1.1. Общие сведения о программах, лексемах и алфавите языка
- •1.3. Идентификаторы и служебные слова
- •2. Константы: целые, вещественные (с плавающей точкой), перечислимые, символьные (литерные), строковые (строки или литерные строки)
- •3. Операции. Знаки операций. Унарные, бинарные и тернарные операции. Приоритеты операций.
- •3.1 Знаки операций
- •3.2 Унарные операции
- •3.3 Бинарные операции.
- •3.4 Приоритеты операций
- •4. Переменные. Определения и описания. Спецификатор typedef.
- •4.1 Переменные. Определения и описания.
- •4.2 Класс памяти
- •5. Базовые и производные типы данных. Массивы. Указатели, ссылки и адреса. Структуры. Поля битов. Объединения
- •5.1 Массивы
- •5.2 Указатели, ссылки и адреса объектов
- •5.3 Структуры
- •5.3 Поля битов
- •5.4 Объединения
- •6. Операторы
- •6.1 Оператор выражение
- •6.2 Пустой оператор
- •6.3 Составной оператор
- •6.4 Оператор if
- •If (выражение) оператор-1; [else оператор-2;]
- •6.5 Оператор switch
- •6.6 Оператор break
- •6.7 Оператор for
- •6.8 Оператор while
- •6.8 Оператор do while
- •6.9 Оператор continue
- •6.10 Оператор return
- •6.11 Оператор goto
- •7. Функции
- •7.1 Определения, описания и вызовы функций
- •7.2 Начальные (умалчиваемые) значения параметров.
- •7.3 Функции с переменным количеством параметров
- •7.4 Перегрузка функций.
- •7.5 Ссылки и параметры-ссылки.
- •7.6 Шаблоны функций.
- •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 Обработка окном сообщений
ЭВМ И ПРОГРАММИРОВАНИЕ
Предисловие
1. Лексические основы языка С++. Общие сведения о программах, лексемах и алфавите языка. Идентификаторы и служебные слова.
1.1. Общие сведения о программах, лексемах и алфавите языка
1.2. Алфавит и лексемы языка СИ++.
1.3. Идентификаторы и служебные слова
2. Константы: целые, вещественные (с плавающей точкой), перечислимые, символьные (литерные), строковые (строки или литерные строки)
3. Операции. Знаки операций. Унарные, бинарные и тернарные операции. Приоритеты операций.
3.1 Знаки операций
3.2 Унарные операции
3.3 Бинарные операции.
3.4 Приоритеты операций
4. Переменные. Определения и описания. Спецификатор typedef.
4.1 Переменные. Определения и описания.
4.2 Класс памяти
5. Базовые и производные типы данных. Массивы. Указатели, ссылки и адреса. Структуры. Поля битов. Объединения
5.1 Массивы
5.2 Указатели, ссылки и адреса объектов
5.3 Структуры
5.3 Поля битов
5.4 Объединения
6. Операторы
6.1 Оператор выражение
6.2 Пустой оператор
6.3 Составной оператор
6.4 Оператор if
6.5 Оператор switch
6.6 Оператор break
6.7 Оператор for
6.8 Оператор while
6.8 Оператор do while
6.9 Оператор continue
6.10 Оператор return
6.11 Оператор goto
7. Функции
7.1 Определения, описания и вызовы функций
7.2 Начальные (умалчиваемые) значения параметров.
7.3 Функции с переменным количеством параметров
7.4 Перегрузка функций.
7.5 Ссылки и параметры-ссылки.
7.6 Шаблоны функций.
8. Технологии программирования.
8.1 Введение.
8.2 Модульное программирование.
8.3 Нисходящее программирование.
8.4 Структурное программирование.
8.5 Понятия объекта, класса объектов.
8.6 Основные понятия объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм.
9. Классы С++.
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.4 Перегрузка операций ++ и --.
15.5 Перегрузка операции вызова функции
15.6 Перегрузка операции присваивания
15.7 Основные правила перегрузки операций.
16. Обработка исключительных ситуаций
16.1 Операторы try, throw, catch
16.2 Универсальный обработчик исключений
17. Структура Windows-приложения
17.1 Разработка 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 Обработка окном сообщений
Предисловие
Язык программирования Си++ был разработан на основе языка Си Бьярном Страуструпом (Bjarne Stroustrup) и вышел за пределы его исследовательское группы в начале 80-х годов. На первых этапах разработки (1980г.) язык носил условное название "Си с классами", а в 1983 г. Рик Масситти придумал название "Си++'', что образно отразило происхождение этого нового языка от языка Си. Язык Си++ является расширением (надмножеством) языка Си, поэтому программы, написанные на Си, могут обрабатываться компилятором языка Си++. Более того, в программах на языке Си++ можно использовать тексты на языке Си и обращаться к библиотечным функциям языка Си. Таким образом, одно из достоинств Си++ состоит в возможности использовать уже существующие программы на Си. Однако это не единственное достоинство языка. Язык Си++ был создан с учетом следующих целей: улучшить язык Си, поддержать абстракцию данных и обеспечить объектно-ориентированное программирование.
Через несколько лет его практического использования стандартом де-факто стала спецификация языка AT&T C++ release 2.0, разработанная в Bell Laboratories фирмы AT&T под руководством автора языка Б. Страуструпа. Затем там же появилась усовершенствованная версия 3.0 языка Си++. В настоящее время в Американском национальном институте Стандартов (ANSI) существует комитет по языку Си++. Изданное в 1990 году описание языка с комментариями принято комитетом ANSI в качестве исходного материала для стандартизации Си++. Весьма полная реализация соглашений по языку Си++ выполнена в широко распространенных компиляторах Turbo C++ и Borland C++ фирмы Borland, Microsoft Visual C++ фирмы Microsoft.
1. Лексические основы языка С++. Общие сведения о программах, лексемах и алфавите языка. Идентификаторы и служебные слова.
1.1. Общие сведения о программах, лексемах и алфавите языка
Следуя классикам, начнем с примера программы, выводящей на экран фразу "Hello, World!"
// HELLO.CPP - имя файла с программой
#include <iostream.h>
void main() {
cout << "\nHello, World!\n";
}
Основная программная единица на языке Си++ - это текстовый файл с названием <имя>.срр, где cpp - принятое расширение для программ на Си++, а имя выбирается достаточно произвольно. Для удобства ссылок и сопоставления программ с их внешними именами целесообразно помещать в начале текста каждой программы строку комментария с именем файла, в котором она находится. Текстовый файл с программой на Си++ вначале обрабатывает препроцессор, который распознает команды (директивы) препроцессора (каждая такая команда начинается с символа '#') и выполняет их. В приведенной выше программе использована препроцессорная команда include <имя вставляемого файла>
Выполняя препроцессорные директивы, препроцессор изменяет исходный текст программы. Команда <include> вставляет в программу заранее подготовленные тексты из включаемых файлов. Сформированный таким образом измененный текст программы поступает на компиляцию. Компилятор, во-первых, выделяет из поступившего к нему текста программы лексические элементы, т.е. лексемы, а затем на основе грамматики языка распознает смысловые конструкции языка (выражения, определения, описания, операторы и т.д.), построенные из этих лексем. Фазы работы компилятора здесь рассматривать нет необходимости. Важно только отметить, что в результате работы компилятора формируется объектный модуль программы.
Компилятор, выполняя лексический анализ текста программы на языке Си++, для распознавания начала и (или) конца отдельных лексем использует пробельные разделители. К пробельным разделителям относятся собственно символы пробелов, символы табуляции, символы перехода на новую строку. Кроме того, к пробельным разделителям относятся комментарии.
В языке Си++ есть два способа задания комментариев. Традиционный способ (ведущий свое происхождение от многих предшествующих языков, например, ПЛ/1, Си и т.д.) определяет комментарий как последовательность символов, ограниченную слева парой символов /*, а справа - парой символов */. Между этими граничными парами может размещаться почти любой текст, в котором разрешено использовать не только символы из алфавита языка Си++, но и другие символы (например, русские буквы):
/* Это комментарий */
ANSI-стандартом запрещено вкладывать комментарии друг в друга, однако многие компиляторы предусматривают режим, допускающий вложение комментариев.
Второй способ (введенный в Си++) определяет комментарий как последовательность символов, началом которой служат символы //, а концом - код перехода на новую строку. Таким образом, однострочный комментарий имеет вид:
// Это однострочный комментарий, специфичный для языка Си++
1.2. Алфавит и лексемы языка СИ++.
В алфавит языка Си++ входят
прописные и строчные буквы латинского алфавита;
цифры 0, 1, 2, 3, 4, 5, 6 7, 8, 9;
специальные знаки: " { } , | [ ] ( ) + - / % \ ; ' : ? < = > _ ! & # ~ ^ . *
Из символов алфавита формируются лексемы языка:
идентификаторы;
ключевые (служебные, иначе зарезервированные) слова;
константы;
знаки операций;
разделители (знаки пунктуации).