Объектно-ориентированное программирование на C++
Описание файла
PDF-файл из архива "Объектно-ориентированное программирование на C++", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
Объектно-ориентированноепрограммирование на C++С.Ю. СкоробогатовВесна 20151 / 99Список литературы по модулюБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследование1. Слайды лекций.www.dropbox.com/s/sls69hmat8wli36/module_cpp.pdf2. Б. Страуструп. Язык программирования C++. Специальное издание. – М.: Бином, 2011.www.dropbox.com/s/xg7ax2qpbhwbw58/cppbook.djvu3. Б. Страуструп. Дизайн и эволюция C++. – М.: ДМКПресс; Спб.: Питер, 2006.www.dropbox.com/s/cflejuy2wx7he6r/cppdesign.djvuМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключения2 / 99История языка C++БазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияОсновные этапы:Начало 80-х: C with classes, транслятор cfront.1983: переименование в C++, виртуальные функции, перегрузка функцийи операторов, ссылки.1985: выход книги СтрауструпаБ.
СтрауструпThe C++ Programming Language.1989: C++ 2.0 (множественное наследование, абстрактныеклассы, обобщённые типы, статические функции-члены,функции-константы и защищённые члены).1998: стандарт ISO/IEC 14882:1998 – С++98.2003: стандарт ISO/IEC 14882:2003.2011: стандарт ISO/IEC 14882:2011 – C++11 (выведениетипов, расширенный for, замыкания).3 / 99Основные особенности C++БазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияСовместимость с C: C++ содержит в себе язык C какподмножество (с незначительными изменениями, связанными с более строгим контролем типов);Поддержка ООП: в C++ реализованы классы с поддержкой множественного наследования, перегрузки операций и обобщённого программирования;Небезопасность: в C++ ошибки при работе с памятьюмогут привести к непредсказуемой работе программы;Ручное управление памятью: автоматическое управление памятью в C++ не реализовано из принципиальныхсоображений;Объекты не только в куче: в отличие от языка Java, вC++ объекты не обязаны размещаться на верхнем уровнекучи – они могут «жить» в локальных и глобальных переменных, в элементах массивов, в полях других объектов.4 / 99Программа «Hello, World»БазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияПрограмма на C++ (hello.cpp):1# include < iostream >23using namespace std ;456789int main (){cout << " Hello , ␣ world ! " << endl ;return 0;}Компиляция:g ++ -o hello hello .
cppЗапуск:./ hello5 / 99Простые расширения языка CБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияОднострочные комментарии. Начинаются с //.Операторы-объявления. Объявление локальной переменной может располагаться в любом месте, где допустимо располагать оператор.Объявления в заголовке for.
В секции инициализацииоператора for можно объявлять переменные.Перегрузка функций. Допустимо объявлять несколькоодноимённых функций с разными сигнатурами.Теги как имена типов. Теги структур, объединений иперечислений – полноценные имена типов, которые можноиспользовать без ключевых слов struct, union и enum.Булевский тип.
Базовый тип bool с двумя значениями:true и false. Впрочем, для совместимости с C в условиях оператора if и циклов могут применяться числовыезначения.Ссылочный тип данных. см. следующие слайды.6 / 99Объявление переменных ссылочного типаБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийСсылка в C++ – это типизированный указатель, к которому неприменимы арифметические операции, и который неможет быть нулевым. Кроме того, недопустимы ссылки нассылки.Для объявления ссылки используется префиксный декларатор «&»:тип & имя_переменной ;При этом ссылки в глобальных и локальных переменныхдолжны быть обязательно инициализированы при объявлении (забегая вперёд: ссылки в полях объектов должны бытьинициализированы в конструкторе класса).Более того, значение, полученное ссылкой при инициализации, в дальнейшем не может быть изменено.Исключения7 / 99Инициализация и использование ссылокБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийДля того чтобы присвоить ссылке адрес некоторого значения в памяти, не нужно использовать операцию «&» дляполучения адреса объекта.
Для доступа к значению, на которое указывает ссылка, не нужно использовать операциюразыменования «*».Например,int main (){int x = 10;int & y = x ;cout << y <<y = 20;cout << x <<return 0;}// y указывает на x"␣";// меняем значение x через yendl ;ИсключенияВывод:10 208 / 99Ссылки в формальных параметрах функцийБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияИспользование ссылок в качестве параметров функции позволяет имитировать var-параметры процедур и функцийязыка Pascal.Например,void swap ( int &a , int & b ) {int t = a ;a = b;b = t;}int main () {int x = 10 , y = 20;swap (x , y );cout << x << " ␣ " << y << endl ;return 0;}Вывод:20 109 / 99Ссылки как возвращаемые значения функцийБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияСсылка может быть возвращаемым значением функции.При этом надо следить, чтобы случайно не вернуть ссылкуна локальную переменную.Например,char & ith ( char *s , int i ){return s [ i ];}int main (){char s [] = " qwerty " ;ith (s , 2) = ’x ’;cout << s << endl ;return 0;}Вывод:qwxrty10 / 99Константные ссылкиБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияКак мы увидим в дальнейшем, особую роль играют константные ссылки, объявляемые с модификатором const:const тип & имя_переменной ;Например,int main (){int x = 10;const int & y = x ;cout << y << endl ;y = 20; // Ошибка !return 0;}Сообщение об ошибке:test .
cpp : In function ’ int ␣ main () ’:test . cpp :11:6: error : assignment ofread - only reference ’y ’11 / 99Объявление классаБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияВ языке C++ любая структура de facto является классом.Однако, классы принято объявлять с помощью конструкцииclass Имя{...};Отличие этой конструкции от объявления структуры заключается в том, что по умолчанию все члены структуры(поля, методы и т.д.) доступны извне структуры, а членыкласса – недоступны.В теле класса располагаются объявления полей, прототипы методов и конструкторов, а также в некоторых случаях определения методов и конструкторов (злоупотреблятьопределениями не стоит, чтобы не мешать раздельной компиляции).12 / 99Секции в объявлении классаБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияДля управления доступом к членам класса в C++ предусмотрены public-, private- и protected-секции внутри объявления класса:class Имя{public :...private :...protected :...};Секции могут быть перечислены внутри объявления класса в любом порядке и количестве.
Члены класса, попадающие в public-секцию, видны отовсюду, члены из privateсекции видны только из методов данного класса, а члены protected-секции – из методов данного класса и егоклассов-наследников.13 / 99Пример: секции в объявлении классаБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийclass Person{public :string name ;int year_of_birth ;Person ( string , int , string );string get_address ();private :string address ;};В примере конструктор класса Person, а также методget_address представлены прототипами.
Их определениямогут находиться в другом файле.Исключения14 / 99Объявление полейБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияВ языке C++ экземплярные поля класса объявляются также, как и поля структур в языке C. При этом объявлениястатических полей начинаются с модификатора static.По умолчанию поля недоступны извне класса, но доступныизвне структуры или объединения.Например,class Point{public :int x , y ;static int count ;};// Координаты точки// Общее количество точекОтметим, что каждое статическое поле должно быть дополнительно определено а одном из единиц компиляции проекта(cpp-файле).15 / 99Определения статических полейБазовыесведенияВведениеСсылкиКлассыПоля и методыКонструкторыСоздание иуничтожениеобъектовКопированиеобъектовОдиночноенаследованиеМножественноенаследованиеОбобщённоепрограммированиеПерегрузкаоперацийИсключенияОсобенностью языка C++ является то, что он расчитан нату же схему компиляции, что и язык C.