И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++ (1114893)
Текст из файла
Московский государственный университет им. М. В. ЛомоносоваФакультет вычислительной математики и кибернетикиИ. А. Волкова, А. В. Иванов, Л. Е. КарповОсновы объектно-ориентированногопрограммирования.Язык программирования С++.учебное пособие для студентов 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.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.