И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++
Описание файла
PDF-файл из архива "И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Московский государственный университет им. М. В. ЛомоносоваФакультет вычислительной математики и кибернетикиИ. А. Волкова, А. В. Иванов, Л. Е. КарповОсновы объектно-ориентированногопрограммирования.Язык программирования С++.учебное пособие для студентов 2 курсаl%“*"=2011УДКББКПечатается по решению Редакционно-издательского совета факультетавычислительной математики и кибернетикиМГУ им. М.
В. ЛомоносоваРецензенты:проф., д.ф.-м.н. И. В. Машечкиндоцент, к.ф.-м.н. А. Н. ТерехинИ. А. Волкова, А. В. Иванов, Л. Е. КарповОсновы объектно-ориентированного программирования. Язык программирования С++. Учебное пособие для студентов 2 курса. — М.: Издательскийотдел факультета ВМК МГУ (лицензия ИД № 05899 от 24.09.2001), 2011 —112 с.ISBN-13 978-5-89407-439-9Настоящее учебное пособие является дополнением к ранее выпущеннымпособиям по курсу «Системы программирования»: И.
А. Волкова,А. А. Вылиток, Т. В. Руденко «Формальные грамматики и языки. Элементытеории трансляции» и И. А. Волкова, И. Г. Головин, Л. Е. Карпов «Системыпрограммирования». Пособие представляет собой конспект соответствующих лекций.Вучебномпособиикраткорассматриваетсяобъектно-ориентированный подход к программированию на примере языка программирования C++.Учебное пособие предназначено для студентов второго курса факультета ВМК МГУ им. М. В.
Ломоносова, а также может быть рекомендованостудентам отделения второго высшего образования при изучении курса«Языки программирования», читаемого по аналогичной программе.ISBN-13978-5-89407-439-9© Издательский отдел факультетавычислительной математикии кибернетикиМГУ им. М. В. Ломоносова, 2011© И. А.
Волкова, А. В. Иванов,Л. Е. Карпов, 2011Материалы для студентов ВМиК http://cmcmsu.no-ip.info/ОглавлениеГлава 1. Объектно-ориентированное программирование (ООП) .. 51.1. Краткий обзор основных парадигм программирования1.2. Основные принципы ООП1.3. Абстрактные типы данных689Глава 2. Отличия C и C++ ................................................................ 112.1.2.2.2.3.2.4.2.5.2.6.Работа с динамической памятьюОписания, значения параметров по умолчаниюТип «bool»СсылкиСтандартная библиотека С++, стандартный ввод-выводПространства имен, пространство имен «std». Операция «::»111213131516Глава 3. Классы и объекты С++....................................................... 193.1.3.2.3.3.3.4.3.5.3.6.Синтаксис описания классаУправление доступом к членам классаКлассы и структуры С++Манипуляции с состоянием объектаКласс как область видимостиОбъявление и определение методов класса.
Спецификатор«inline»3.7. Указатель «this»3.8. Указатель на член класса1920212223232425Глава 4. Конструкторы и деструкторы ........................................... 274.1. Конструктор умолчания4.2. Конструктор преобразования и конструкторы с двумя и болеепараметрами4.3. Конструктор копирования4.4. Спецификатор «explicit»4.5.
Конструктор копирования и операция присваивания4.6. Автоматическая генерация конструкторов и деструкторов4.7. Список инициализации4.8. Порядок вызова конструкторов и деструкторов2929303333343436Глава 5. Статические члены класса................................................. 40Глава 6. Константные члены класса. Модификатор «const» ........ 43Глава 7. Друзья классов....................................................................
45Глава 8. Статический полиморфизм ............................................... 488.1.8.2.8.3.8.4.Перегрузка бинарных операцийПерегрузка унарных операцийПерегрузка функцийАлгоритм поиска оптимально отождествляемой функции дляодного параметра8.4.18.4.2Остальные стандартные целочисленные и вещественные преобразования ...................... 58Преобразование указателей ..................................................................................................... 59Преобразования пользователя.......................................................................
618.4.4.1.8.4.4.2.8.4.5Целочисленные расширения ................................................................................................... 58Расширения с плавающей точкой ........................................................................................... 58Отождествление с помощью стандартных преобразований ...................... 588.4.3.1.8.4.3.2.8.4.457Точное отождествление ................................................................................. 57Отождествление с помощью расширений ................................................... 588.4.2.1.8.4.2.2.8.4.3485255Конструктор преобразования ..................................................................................................
61Функция преобразования (операция преобразования)......................................................... 61Отождествление по «…» ............................................................................... 64Глава 9. Виды отношений между классами ................................... 669.1. Наследование67Оглавление9.2. Агрегация67Глава 10. Одиночное наследование................................................. 6910.1.10.2.10.3.10.4.10.5.10.6.Правила наследованияПреобразования указателейПравила видимости при наследованииЗакрытое (private) наследованиеПерекрытие именНаследование и повторное использование кода697071747678Глава 11.
Динамический полиморфизм, механизм виртуальныхфункций...................................................................................... 8311.1. Виртуальные деструкторы11.2. Реализация виртуальных функций11.3. Абстрактные классы. Чистые виртуальные функции848688Глава 12. Средства обработки ошибок, исключения и обработкаисключений................................................................................
8912.1. Правила выбора обработчика исключения12.2. Стандартные исключения12.3. Последовательность действий при возникновенииисключительной ситуации909292Глава 13. Множественное наследование, интерфейсы ................. 9413.1. Видимость при множественном наследовании13.2. Виртуальные базовые классы13.3. Интерфейсы949596Глава 14.
Динамическая информация о типе (RTTI)..................... 97Глава 15. Параметрический полиморфизм................................... 10315.1.15.2.15.3.15.4.Параметры шаблонаШаблоны функцийСпециализация шаблонной функцииАлгоритм поиска оптимально отождествляемой функции(с учетом шаблонов)15.5. Шаблонные классы15.6. Эквивалентность типов103104106107108110Глава 16. Стандартная Библиотека шаблонов STL ..................... 11216.1.16.2.16.3.16.4.16.5.16.6.16.7.16.8.КонтейнерыРаспределители памятиИтераторыАлгоритмыДостоинства и недостатки STL-подходаКонтейнер векторКонтейнер списокПример решения задачи с использованием контейнеров STL112113114117118119123125Глава 17.
Литература ...................................................................... 127Объектно-ориентированное программирование (ООП)Глава 1.Объектно-ориентированноепрограммирование (ООП)Объектно-ориентированная технология (парадигма) программированиянаиболее распространена и востребована в настоящее время. При объектно-ориентированном подходе к программированию программа представляетсобой совокупность взаимодействующих между собой данных — объектов.Функциональную возможность и структуру объектов задают классы — типыданных, определенные пользователем.Изучение ООП целесообразно начать на примере объектно-ориентированного языка программирования C++ ([9], [14]), как наиболеетеоретически выдержанного в этой части. Другие языки, поддерживающиеидеи ООП, такие, как Object Pascal [4], Java [7], разрабатывались в первуюочередь с учетом удобства программирования задач в соответствующихпредметных областях.Язык C++, унаследовав язык C (стандарт С90 — см.
[1]), был разработанего автором Б. Страуструпом [12] с наиболее возможной реализацией теоретических концепций ООП. Язык C++ вобрал в себя не только некоторыеконцепции языка С, а также и некоторых других языков. Например, концепция классов взята автором С++ из языка Simula [10], а концепция наследования — из языка Smalltalk.Следует отметить, что развитие языка C++, а также сопряженное с нимразвитие технологии программирования, в частности, развитие COM (Component Object Model) технологии [5] приводит к некоторому отступлению отстрогой теории ООП. Так, в COM-технологии требуется наличие базовогонадкласса, что отсутствует в теории ООП.Некоторые отступления также имеются в визуальных реализациях C++:Visual C++ [6] в рамках пакета Microsoft Visual Studio, C++ Builder [3] фирмыBorland.В данном учебном пособии C++ рассматривается в строго теоретическом аспекте.5Объектно-ориентированное программирование (ООП)1.1.
Краткий обзор основныхпарадигм программированияВ соответствии с концепцией фон-Неймана — основателя теоретическойконцепции компьютерной техники, процессор обрабатывает данные, выполняя инструкции (команды), которые находятся в той же оперативнойпамяти, что и данные.Таким образом, можно выделить две основные сущности процесса обработки информации: код, как совокупность инструкций, и данные. Всепрограммы в соответствии с выбранной технологией программированияконцептуально организованы вокруг своего кода или вокруг своих данных.Рассмотрим основные на сегодняшний день парадигмы программирования:1.
Процессно-ориентированная парадигма, при которой программапредставляет собой ряд последовательно выполняемых операций —модель фон-Неймана. При этом код воздействует на данные.Языки, реализующие эту парадигму, называются процедурнымиили императивными. Такими языками являются, например, C,Pascal и др.2. Объектно-ориентированная парадигма, при которой программарассматривается как совокупность фрагментов кода, обрабатывающих отдельные совокупности данных — объекты. Эти объектывзаимодействуют друг с другом посредством так называемых интерфейсов. При этом данные управляют доступом к коду.При повышении сложности алгоритма процессно-ориентированнаяпарадигма сталкивается с существенными проблемами.
Переход к объектным принципам программирования позволяет значительно улучшить внутреннюю организацию программы, в результате чего повышается производительность при разработке программных комплексов.Наряду с двумя вышеизложенными основными в настоящее время парадигмами программирования используются еще две парадигмы:1. Аппликативная или функциональная парадигма. Основная идеяданного подхода заключается в формализованном определениифункции, которую выполняет программа. Таким образом, вместоопределения последовательности состояний, через которые долженпройти компьютер, чтобы получить требуемый результат, необходимо определить функцию, при применении которой к исходнымданным получается требуемое решение:y = f (x)Разработка программы при этом подходе сводится к конструированиюсложной функции из имеющихся стандартных простых функций:y = f1 ( f 2 ( f 3 (...), f 4 (...),...))Языками, поддерживающими такую парадигму, являются, например,языки LISP и ML.
Данные при таком подходе, так же, как и код, представ6Объектно-ориентированное программирование (ООП)ляются списками одинаковой структуры, значит, программа, работая подуправлением интерпретатора, может обрабатывать свой собственный код, какданные. в этом случае стирается грань между кодом и данными. Поэтомуодной из важных областей применения данной парадигмы являются системыискусственного интеллекта (ИИ).ПримечаниеОбрабатывать коды, как обрабатывают данные, можно и при использованиипроцессно-ориентированного подхода, однако, при этом программированиедолжно производиться в среде низкого уровня — на языке ассемблера.2.