Борю С.Ю.
Язык программирования C++
(языки объектно орентированного программирования)
Информация о курсе
В систематизированном виде излагаются основные понятия и описываются возможности языка C++. При этом основное внимание уделяется объяснению того, как теми или иными возможностями пользоваться.
Язык программирования C++ в – это универсальный язык программирования, который позволяет разрабатывать программы в соответствии с разными парадигмами: процедурным программированием, объектно-ориентированным, параметрическим. В данном курсе рассматриваются все основные возможности языка C++ и их применение при разработке объектно-ориентированных программ. Дается краткое описание библиотек языка C++, необходимых для создания типичных программ
Лекции: описание
1. Начальные сведения о языке
История создания языка и его эволюция. Международный стандарт языка. Сферы применения языка Си++. Пример простой программы. Объясняется процесс ее написания, использования простейших конструкций языка, использования транслятора и запуск программы на выполнение.
2. Имена, переменные и константы
Правила именования переменных и функций языка, правила записи констант. Понятие ключевого или зарезервированного слова, список ключевых слов Си++.
3. Операции и выражения
Правила формирования и вычисления выражений в языке Си++. Все операции языка.
4. Операторы
Описываются все операторы управления, имеющиеся в языке Си++, даются примеры их использования.
5. Функции
Функции – это основные единицы построения программ при процедурном программировании на языке Си++. Правила их записи, вызова и передачи параметров.
6. Встроенные типы данных
Рассматриваются все встроенные типы языка Си++: целые числа разной разрядности, вещественные числа, логические величины, перечисляемые значения, символы и их кодировка.
7. Классы и объекты
Способы описания классов. Создание объектов. Обращение к атрибутам и методам объектов.
8. Производные типы данных
Создание и использование массивов, структур, объединений, указателей. Адресная арифметика. Строки и литералы.
9. Распределение памяти
Проблемы при явном распределении памяти в Си++, способы их решения. Ссылки и указатели. Распределение памяти под переменные, управление памятью с помощью переопределения операторов new и delete.
10. Производные классы, наследование
Наследование, виды наследования. Виртуальные методы. Абстрактные классы. Множественное наследование.
11. Контроль доступа к объекту
Рассматривается возможности контроля доступа к атрибутам и методам объекта, контроль по чтению и по записи.
12. Классы – конструкторы и деструкторы
Конструкторы и деструкторы классов. Возможности инициализации объектов. Копирующий конструктор. Операции new и delete.
13. Дополнительные возможности классов
Рассматриваются дополнительные возможности при определении классов, включая переопределение операций, определение методов inline и задание собственных преобразований типа.
14. Компоновка программ, препроцессор
Способы разработки больших программ. Компоновка нескольких файлов в одну программу. Включаемые файлы. Препроцессор.
15. Определение, время жизни и области видимости переменных в больших программах
Возможности построения больших программ, использование общих данных. Определение контекста, оператор namespace.
16. Обработка ошибок
Попытка классификации ошибок. Сообщение об ошибке с помощью возвращаемого значения. Исключительные ситуации. Обработка исключительных ситуаций, операторы try и catch.
17. Bвод-вывод
Потоки. Манипуляторы и форматирование ввода-вывода. Строковые потоки. Ввод-вывод файлов.
18. Шаблоны
Понятие шаблона. Функции-шаблоны. Шаблоны классов. Примеры использования.
Литература
-
Фридман А.Л.
Язык программирования Си++
Интернет-университет информационных технологий - ИНТУИТ.ру, 2004
-
Фридман А.Л.
Основы объектно-ориентированного программирования на языке Си++. Учебный курс
Радио и связь, 1999
-
Бьерн Страуструп
Язык программирования C++, 3 издание
Невский Диалект, 1999
-
Мейерс С.
Эффективное использование C ++. 50 рекомендаций по улучшению ваших программ и проектов
ДМК, 2000
-
Шилдт Герберт. Самоучитель С++ (2-ред)./Пер. с англ.-СПб.: BHV-Санкт-Петербург, 1997.-512с. (+дискета с примерами)
-
Бруно Бабэ. Просто и ясно о Borland C++: Версии 4.0 и 4.5/ Пер. с англ. -М.:БИНОМ, 1994. - 400с.
-
Клочков Д.П., Павлов Д.А. Введение в объектно-ориентированное программирование. / Учебно-методическое пособие. - Изд. Нижегор. ун-та, 1995. - 70с.
-
Элиас М., Страуструп Б. Справочное руководство по языку С++ с комментариями. /Пер. с англ. -М.:Мир, 1992.- с.
Оглавление
1 Начальные сведения о языке 6
1.1 История и назначение языка Си++ 6
1.2 Простейшая программа на языке Си++ 6
1.3 Компиляция и выполнение программы 7
1.4 Компилирование и выполнение программ в среде Windows 7
1.5 Компилирование и выполнение программ в среде Unix 8
2 Имена, переменные и константы 9
2.1 Имена 9
2.2 Переменные 9
2.3 Константы 10
3 Операции и выражения 11
3.1 Выражения 11
3.2 Операция присваивания 11
3.3 Все операции языка Си++ 12
3.4 Арифметические операции 12
3.5 Операции сравнения 13
3.6 Логические операции 13
3.7 Битовые операции 13
3.8 Условная операция 14
3.9 Последовательность 14
3.10 Операции присваивания 14
3.11 Порядок вычисления выражений 14
4 Операторы 16
4.1 Что такое оператор 16
4.2 Операторы-выражения 16
4.3 Объявления имен 16
4.4 Операторы управления 16
4.5 Условные операторы 16
4.6 Операторы цикла 18
4.7 Оператор возврата 20
4.8 Оператор перехода 20
Функции 22
5.1 Вызов функций 22
5.2 Имена функций 23
5.3 Необязательные аргументы функций 23
5.4 Рекурсия 24
6 Встроенные типы данных 26
6.1 Общая информация 26
6.2 Целые числа 26
6.3 Вещественные числа 28
6.4 Логические величины 29
6.3 Символы и байты 29
6.4 Кодировка, многобайтовые символы 30
6.5 Наборы перечисляемых значений 31
7 Классы и объекты 32
7.1 Понятие класса 32
7.2 Определение методов класса 32
7.4 Переопределение операций 33
7.5 Подписи методов и необязательные аргументы 34
7.6 Запись классов 34
8 Производные типы данных 36
8.1 Массивы 36
8.2 Структуры 37
8.3 Битовые поля 37
8.4 Объединения 38
8.5 Указатели 39
8.6 Адресная арифметика 41
8.7 Связь между массивами и указателями 42
8.8 Бестиповый указатель 43
8.9 Нулевой указатель 43
8.10 Строки и литералы 44
9 Распределение памяти 47
9.1 Автоматические переменные 47
9.2 Статические переменные 47
9.3 Динамическое выделение памяти 48
9.4 Выделение памяти под строки 48
9.5 Рекомендации по использованию указателей и динамического распределения памяти 49
9.6 Ссылки 49
9.7 Распределение памяти при передаче аргументов функции 50
9.8 Рекомендации по передаче аргументов 52
10 Производные классы, наследование 54
10.1 Наследование 54
10.2 Виртуальные методы 57
10.3 Виртуальные методы и переопределение методов 59
10.4 Преобразование базового и производного классов 60
10.5 Внутреннее и защищенное наследование 60
10.6 Абстрактные классы 61
10.7 Множественное наследование 62
10.8 Виртуальное наследование 64
11 Контроль доступа к объекту 66
11.1 Интерфейс и состояние объекта 66
11.2 Объявление friend 67
11.3 Использование описателя const 68
11.4 Доступ к объекту по чтению и записи 68
12 Классы – конструкторы и деструкторы 70
12.1 Копирующий конструктор 71
12.2 Деструкторы 73
12.3 Инициализация объектов 74
12.4 Операции new и delete 77
13 Дополнительные возможности классов 80
13.1 Переопределение операций 80
13.2 Как определять операции 81
13.3 Преобразования типов 82
13.4 Явные преобразования типов 82
13.5 Стандартные преобразования типов 83
13.6 Преобразования указателей и ссылок 84
13.7 Преобразования типов, определенных в программе 84
14 Компоновка программ, препроцессор 86
14.1 Компоновка нескольких файлов в одну программу 86
14.2 Проблема использования общих функций и имен 86
14.3 Использование включаемых файлов 88
14.4 Препроцессор 90
14.5 Определение макросов 90
14.6 Условная компиляция 91
14.7 Дополнительные директивы препроцессора 91
15 Определение, время жизни и области видимости переменных в больших программах 92
15.1 Файлы и переменные 92
15.2 Общие данные 92
15.3 Глобальные переменные 94
15.4 Повышение надежности обращения к общим данным 95
15.5 Область видимости имен 97
15.6 Оператор определения контекста namespace 98
16 Обработка ошибок 100
16.1 Виды ошибок 100
16.2 Возвращаемое значение как признак ошибки 100
16.3 Исключительные ситуации 102
16.4 Обработка исключительных ситуаций 103
16.5 Примеры обработки исключительных ситуаций 104
17 Bвод-вывод 108
17.1 Потоки 108
17.2 Операции << и >> для потоков 108
17.3 Манипуляторы и форматирование ввода-вывода 109
17.4 Строковые потоки 110
17.5 Ввод-вывод файлов 111
18 Шаблоны 114
18.1 Назначение шаблонов 114
18.2 Функции-шаблоны 114
18.3 Шаблоны классов 115
18.4 "Интеллигентный указатель" 116
18.5 Задание свойств класса 119
Литература 122
1 Начальные сведения о языке
1.1 История и назначение языка Си++
Разработчиком языка Си++ является Бьерн Страуструп. В своей работе он опирался на опыт создателей языков Симула, Модула 2, абстрактных типов данных. Основные работы велись в исследовательском центре компании Bell Labs.
Непосредственный предшественник Си++ – язык Си с классами – появился в 1979 году, а в 1997 году был принят международный стандарт Си++, который фактически подвел итоги его 20-летнего развития. Принятие стандарта обеспечило единообразие всех реализаций языка Си++. Не менее важным результатом стандартизации стало то, что в процессе выработки и утверждения стандарта язык был уточнен и дополнен рядом существенных возможностей.
На сегодня стандарт утвержден Международной организацией по стандартзации ISO. Его номер ISO/IEC 14882. ISO бесплатно стандарты не распространяет. Его можно получить на узле американского национального комитета по стандартам в информационных технологиях: www.ncits.org В России следует обращаться в ВНИИ Сертификации: http://www.vniis.ru
Проекты стандарта имеются в свободном доступе: ftp://ftp.research.att.com/dist/c++std/WP/CD2/ http://www/research.att.com/~bs/bs_faq.html
Язык Си++ является универсальным языком программирования, в дополнение к которому разработан набор разнообразных библиотек. Поэтому, строго говоря, он позволяет решить практически любую задачу программирования. Тем не менее, в силу разных причин (не всегда технических) для каких-то типов задач он употребляется чаще, а для каких-то – реже.
Си++ как преемник языка Си широко используется в системном программировании. На нем можно писать высокоэффективные программы, в том числе операционные системы, драйверы и т.п. Язык Си++ – один из основных языков разработки трансляторов.
Поскольку системное программное обеспечение часто бывает написано на языке Си или Си++, то и программные интерфейсы к подсистемам ОС тоже часто пишут на Си++. Соответственно, те программы, даже и прикладные, которые взаимодействуют с операционными системами, написаны на языке Си++.
Распределенные системы, функционирующие на разных компьютерах, также разрабатываются на языке Си++. Этому способствует то, что у широко распространенных компонентых моделей CORBA и COM есть удобные интерфейсы на языке Си++.
Обработка сложных структур данных – текста, бизнес-информации, Internet-страниц и т.п. – одна из наиболее распространенных возможностей применения языка. В прикладном программировании, наверное, проще назвать те области, где язык Си++ применяется мало.
Разработка графического пользовательского интерфейса на языке Си++ выполняется, в основном, тогда, когда необходимо разрабатывать сложные, нестандартные интерфейсы. Простые программы чаще пишутся на языках Visual Basic, Java и т.п.
Программирование для Internet в основном производится на языках Java, VBScript, Perl.
В целом надо сказать, что язык Си++ в настоящее время является одним из наиболее распространенных языков программирования в мире.
1.2 Простейшая программа на языке Си++
Самая короткая программа на языке Си++ выглядит так:
// Простейшая программа
int main() { return 1; }
Первая строчка в программе – комментарий, который служит лишь для пояснения. Признаком комментария являются два знака деления подряд (//).
main – это имя главной функции программы. С функции main всегда начинается выполнение. У функции есть имя (main), после имени в круглых скобках перечисляются аргументы или параметры функции (в данном случае у функции main аргументов нет). У функции может быть результат или возвращаемое значение. Если функция не возвращает никакого значения, то это обозначается ключевым словом void. В фигурных скобках записывается тело функции – действия, которые она выполняет. Оператор return 1 означает, что функция возвращает результат – целое число 1.
Если мы говорим об объектно-ориентированной программе, то она должна создать объект какого-либо класса и послать ему сообщение. Чтобы не усложнять программу, мы воспользуемся одним из готовых, предопределенных классов – классом ostream (поток ввода-вывода). Этот класс определен в файле заголовков "iostream.h". Поэтому первое, что надо сделать – включить файл заголовков в нашу программу:
#include
int main() { return 1; }
Кроме класса, файл заголовков определяет глобальный объект этого класса cout. Объект называется глобальным, поскольку доступ к нему возможен из любой части программы. Этот объект выполняет вывод на консоль. В функции main мы можем к нему обратиться и послать ему сообщение:
#include
int main()
{
cout << "Hello world!" << endl;
return 1;
}
Операция сдвига << для класса ostream определена как "вывести". Таким образом, программа посылает объекту cout сообщения "вывести строку Hello world!" и "вывести перевод строки" (endl обозначает новую строку). В ответ на эти сообщения объект cout выведет строку "Hello world!" на консоль и переведет курсор на следующую строку.
1.3 Компиляция и выполнение программы
Программа на языке Си++ – это текст. С помощью произвольного текстового редактора программист записывает инструкцию, в соответствии с которой компьютер будет работать, выполняя данную программу.
Для того чтобы компьютер мог выполнить программу, написанную на языке Си++, ее нужно перевести на язык машинных инструкций. Эту задачу решает компилятор. Компилятор читает файл с текстом программы, анализирует ее, проверяет на предмет возможных ошибок и, если таковых не обнаружено, создает исполняемый файл, т.е. файл с машинными инструкциями, который можно выполнять.
Откомпилировав программу один раз, ее можно выполнять многократно, с различными исходными данными.
Не имея возможности описать все варианты, остановимся только на двух наиболее часто встречающихся.
1.4 Компилирование и выполнение программ в среде Windows
Если Вы используете персональный компьютер с операционной системой Microsoft© Windows 98™, Windows NT™ или Windows 2000™, то компилятор у Вас, скорее всего, Visual C++©. Этот компилятор представляет собой интегрированную среду программирования, т.е. объединяет текстовый редактор, компилятор, отладчик и еще ряд дополнительных программ. Мы предполагаем, что читатель работает с версией 5.0 или старше. Версии младше 4.2 изучать не имеет смысла, поскольку реализация слишком сильно отличается от стандарта языка.
В среде Visual C++ прежде всего необходимо создать новый проект. Для этого нужно выбрать в меню File атрибут New. Появится новое диалоговое окно. В закладке Projects в списке различных типов выполняемых файлов выберите Win32 Consol Application. Убедитесь, что отмечена кнопка Create new workspace. Затем следует набрать имя проекта (например, test ) в поле Project name и имя каталога, в котором будут храниться все файлы, относящиеся к данному проекту, в поле Location. После этого нажмите кнопку "OK".
Теперь необходимо создать файл. Опять в меню File выберите атрибут New. В появившемся диалоге в закладке File отметьте text file. По умолчанию новый файл будет добавлен к текущему проекту test , в чем можно убедиться, взглянув на поле Add to project. В поле Filename нужно ввести имя файла. Пусть это будет main.cpp. Расширение .cpp – это стандарт для файлов с исходными текстами на языке Си++. Поле Location должно показывать на каталог C:\Work. Нажмите кнопку "OK".
На экране появится пустой файл. Наберите текст программы.
Компиляция выполняется с помощью меню Build. Выберите пункт Build test.exe (этому пункту меню соответствует функциональная клавиша F7). В нижней части экрана появятся сообщения компиляции. Если Вы сделали опечатку, двойной щелчок мышью по строке с ошибкой переведет курсор в окне текстового редактора на соответствующую строку кода. После исправления всех ошибок и повторной компиляции система выдаст сообщение об успешной компиляции и компоновке (пока мы не будем уточнять, просто вы увидите сообщение Linking).
Готовую программу можно выполнить с помощью меню Build, пункт Execute test.exe. То же самое можно сделать, нажав одновременно клавиши CTRL и F5. На экране монитора появится консольное окно, и в нем будет выведена строка "Hello world!". Затем появится надпись "Press any key to continue". Эта надпись означает, что программа выполнена и лишь ожидает нажатия произвольной клавиши, чтобы закрыть консольное окно.
1.5 Компилирование и выполнение программ в среде Unix
Если Вы работаете в операционной системе Unix , то, скорее всего, у Вас нет интегрированной среды разработки программ. Вы будете пользоваться любым доступным текстовым редактором для того, чтобы набирать тексты программ.
Редактор Emacs предпочтительнее, поскольку в нем есть специальный режим редактирования программ на языке Си++. Этот режим включается автоматически при редактировании файла с именем, оканчивающимся на ".cpp" или ".h". Но при отсутствии Emacs сгодится любой текстовый редактор.
Первое, что надо сделать – это поместить текст программы в файл. В редакторе следует создать файл с именем main.cpp (расширение cpp используется для текстов программ на языке Си++). Наберите текст программы из предыдущего параграфа и сохраните файл.
Теперь программу надо откомпилировать. Команда вызова компилятора зависит от того, какой компилятор Си++ установлен на компьютере. Если используется компилятор GNU C++, команда компиляции выглядит так:
gcc main.cpp
Вместо gcc может использоваться g++, c++, cc. Уточнить это можно у системного администратора. Отметим, что у широко распространенного компилятора GNU C++ есть ряд отличий от стандарта ISO.
В случае каких-либо ошибок в программе компилятор выдаст на терминал сообщение с указанием номера строки, где обнаружена ошибка. Если в программе нет никаких опечаток, компилятор должен создать исполняемый файл с именем a.out. Выполнить его можно, просто набрав имя a.out в ответ на подсказку интерпретатора команд:
a.out
Результатом выполнения будет вывод на экран терминала строки:
Hello world!
2 Имена, переменные и константы
2.1 Имена
Для символического обозначения величин, имен функций и т.п. используются имена или идентификаторы.
Идентификаторы в языке Си++ – это последовательность знаков, начинающаяся с буквы. В идентификаторах можно использовать заглавные и строчные латинские буквы, цифры и знак подчеркивания. Длина идентификаторов произвольная. Примеры правильных идентификаторов:
Достарыңызбен бөлісу: |