С++ как второй язык в обучении приемам и технологиям программирования
Покупка
Основная коллекция
Тематика:
Программирование на C и C++
Издательство:
Южный федеральный университет
Год издания: 2010
Кол-во страниц: 200
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-9275-0749-8
Артикул: 633206.01.99
В данном учебном пособии внимание уделяется языку С++ и использованию объектно-ориентированного подхода. Оно состоит из трех модулей и проектных заданий
к ним. Для закрепления знаний к каждому модулю даны вопросы для рубежного контроля, а также задания для самостоятельной работы. Адресовано студентам, обучающимся по бакалаврской программе по направлению «Прикладная математика и информатика».
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.01: Математика и компьютерные науки
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство образования и науки РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего профессионального образования «ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ» Я. М. РУСАНОВА, М. И. ЧЕРДЫНЦЕВА С++ КАК ВТОРОЙ ЯЗЫК В ОБУЧЕНИИ ПРИЕМАМ И ТЕХНОЛОГИЯМ ПРОГРАММИРОВАНИЯ Учебное пособие Ростов-на-Дону Издательство Южного федерального университета 2010
УДК 004.43 ББК 32.973.2 Р 88 Рецензенты: ст. преподаватель ЮФУ В. Н. Брагилевский, к.ф.-м.н., доцент ЮФУ М. Э. Абрамян, д.т.н., профессор РГУПС М. А. Бутакова Русанова Я. М. Р 88 С++ как второй язык в обучении приемам и технологиям программирования / Я. М. Русанова, М. И. Чердынцева. – Ростов н/Д : Изд-во ЮФУ, 2010. – 200 с. ISBN 978-5-9275-0749-8 В данном учебном пособии внимание уделяется языку С++ и использованию объектно-ориентированного подхода. Оно состоит из трех модулей и проектных заданий к ним. Для закрепления знаний к каждому модулю даны вопросы для рубежного контроля, а также задания для самостоятельной работы. Адресовано студентам, обучающимся по бакалаврской программе по направлению «Прикладная математика и информатика». ISBN 978-5-9275-0749-8 УДК 004.43 ББК 32.973.2 © Русанова Я. М., Чердынцева М. И., 2010 © Южный федеральный университет, 2010 © Оформление. Макет. Издательство Южного федерального университета, 2010
СОДЕРЖАНИЕ ПРЕДИСЛОВИЕ ....................................................................................................................... 5 ВВЕДЕНИЕ ............................................................................................................................. 6 МОДУЛЬ 1. НАЧАЛЬНЫЕ СВЕДЕНИЯ О ПРОГРАММИРОВАНИИ НА ЯЗЫКЕ С++8 1.1. Используемые термины ................................................................................................ 8 1.2. Первые шаги .................................................................................................................. 9 1.3. Функции как строительные блоки программы......................................................... 14 1.4. Многофайловый проект, включение заголовочных файлов ................................... 21 1.5. Заголовочные файлы и библиотеки в С++ ................................................................ 28 1.6. Целочисленные типы данных .................................................................................... 34 1.7. Типы данных для вещественных значений .............................................................. 40 1.8. Указатели ..................................................................................................................... 45 1.9. Выражения и операции ............................................................................................... 49 1.10. Операторы (управляющие инструкции) ................................................................... 55 Вопросы для рубежного контроля ........................................................................................ 59 Задания для самостоятельной работы ................................................................................... 60 Проектные задания к модулю ................................................................................................ 62 МОДУЛЬ 2. СТРУКТУРЫ ДАННЫХ И ФУНКЦИИ ....................................................... 65 2.1. Одномерные массивы ................................................................................................. 65 2.2. Массивы в динамической памяти .............................................................................. 68 2.3. Связь массивов и указателей ...................................................................................... 70 2.4. Статическое определение двумерных массивов ...................................................... 72 2.5. Двумерные массивы в динамической памяти .......................................................... 74 2.6. Описание и инициализация строк ............................................................................. 77 2.7. Обработка строк в стиле языка C .............................................................................. 83 2.8. Обработка строк в стиле языка C++ .......................................................................... 87 2.9. Встраиваемые функции .............................................................................................. 89 2.10. Перегрузка функций ................................................................................................... 90 2.11. Аргументы по умолчанию .......................................................................................... 95 2.12. Шаблоны функций ...................................................................................................... 97 2.13. Указатели на функции .............................................................................................. 102 2.14. Ввод/вывод и работа с файлами .............................................................................. 105 2.15. Работа с текстовыми файлами в стиле С++ ............................................................ 107 2.16. Работа с бинарными файлами в стиле С++............................................................. 117 2.17. Работа с файлами в стиле языка С ........................................................................... 120 Вопросы для рубежного контроля ...................................................................................... 124 Проектные задания к модулю .............................................................................................. 125 МОДУЛЬ 3. КЛАССЫ И ОБЪЕКТЫ ................................................................................ 130 3.1. Основы создания классов ......................................................................................... 130 3.2. Конструкторы и деструкторы .................................................................................. 134 3.3. Перегрузка операций ................................................................................................ 140 3.4. Дружественные функции .......................................................................................... 142 3.5. Перегрузка префиксной и постфиксной операций инкремента ........................... 145 3.6. Реализация преобразования типов .......................................................................... 147 3.7. Коллекции и итераторы ............................................................................................ 154 3.8. Обработка исключений ............................................................................................. 163
3.9. Шаблоны классов ...................................................................................................... 166 3.10. Наследование классов ............................................................................................... 171 3.11. Открытое наследование ............................................................................................ 172 3.12. Позднее связывание и виртуальные функции ........................................................ 177 3.13. Отношения включения и подобия ........................................................................... 183 Вопросы для рубежного контроля ....................................................................................... 191 Проектные задания к модулю .............................................................................................. 192 ЛИТЕРАТУРА ....................................................................................................................... 199
ПРЕДИСЛОВИЕ Эта книга написана в качестве учебного пособия по курсу «Языки программирования». В данном издании мы стремились достичь двух целей: во-первых, облегчить изучение языка С++ студентам, имеющим базовые знания по основам программирования на языке Паскаль; во-вторых, проде монстрировать приемы решения задач с учетом особенностей языка С++. Выражаем благодарность ст. преподавателю ЮФУ В. Н. Брагилев скому и доценту ЮФУ М. Э. Абрамяну, высказавшим замечания, которые помогли улучшить качество и ценность книги. Мы признательны доценту ЮФУ С. С. Михалковичу за возможность воспользоваться некоторыми ин тересными примерами, а также многим нашим коллегам, преподавателям и студентам, с которыми нас объединяют общие интересы.
ВВЕДЕНИЕ В данной книге содержится материал, важный для понимания языка программирования. Материал не ориентирован на определенную версию компилятора, внимание уделяется именно языку С++ и использованию объектно-ориентированного подхода, а не особенностям конкретной реали зации. В модуле 1 дается неформальное введение в синтаксис языка С++. Изложение материала сопровождается разбором примеров решенных задач. При этом акцент делается не на рассмотрение алгоритмов и методов реше ния, а на особенности синтаксиса языка С++. Такой подход позволяет сту дентам, уже знакомым с базовыми алгоритмами, структурами данных и языком программирования Паскаль, достаточно легко перейти к исполь зованию нового языка программирования. В модуле 2 рассматриваются особенности представления и использо вания таких базовых структур данных языка С++, как массивы, строки и файлы; делается акцент на работу с указателями и адресной арифметикой и функциями в языке С++. Раскрываются возможности использования функций. Модуль 3 содержит материал, который позволит студентам освоить объектно-ориентированные аспекты языка С++. Изложение материала ил люстрируется подробным рассмотрением примеров решенных задач. Такой подход позволит студентам, уже знакомым с базовыми понятиями «класс», «объект», «инкапсуляция», «наследование», «полиморфизм», научиться применять теоретические знания при решении конкретных задач. Представленный в учебном пособии материал используется в курсе «Языки программирования и методы трансляции» бакалаврской програм мы по направлению «Прикладная математика и информатика».
Для облегчения работы с текстом в книге приняты следующие со глашения: Коды программ, фрагменты примеров, операторы, классы, объекты, методы обозначены специальным шрифтом (Courier), что позволя ет легко найти их в тексте. Для указания имен файлов и каталогов используется шрифт Arial. Важные термины, встречающиеся впервые, выделены курсивом. Определения, термины, объяснения для запоминания предваряются специальным символом . Более подробные объяснения отмечены специальным символом . Знак означает, что проводятся сравнения языка С++ с языками Паскаль или С. Специальный символ ☺ означает рекомендации по стилю написания программ. Предостережения от ошибок начинаются со знака . Упражнения, которые необходимо выполнить по ходу изучения, обо значены специальным символом ֠. В конце каждого модуля определены требования к знаниям и уме ниям , которые должен получить студент после изучения модуля.
МОДУЛЬ 1. НАЧАЛЬНЫЕ СВЕДЕНИЯ О ПРОГРАММИРОВАНИИ НА ЯЗЫКЕ С++ Задачи и цели: Ознакомиться с организацией простейшей програм мы на языке С++, способами описания и использования простых функций, операциями ввода-вывода. Рассмотреть принципы организации программ на С++ в виде нескольких исходных модулей. Изучить структуру и назна чение заголовочных файлов. Ознакомиться с базовыми типами в языке С++, включая тип указатель. Рассмотреть особенности некоторых опера ций, особенности правил построения и использования выражений на языке С++. Ознакомиться с возможностями структурных операторов языка. Требуемый начальный уровень подготовки. Владение навыками программирования средствами языка Паскаль. Знакомство с процедурными приемами программирования. Знакомство с модульной структурой проектов. 1.1. Используемые термины Термины «операция», «выражение», «оператор» вводились формаль но при изучении языка программирования Паскаль, поэтому их использо вание позволит легко провести аналогии и отметить различия в синтаксисе этих двух языков программирования. Операция с точки зрения компилятора языка С++ – это команда, ко торая может иметь один, два или три операнда, возвращающая результат. Операциями являются, например: +, –, ++, =, >, ==, new, &, sizeof, « , » – операция запятая и пр. Для классов имеется возможность перегрузки опе раций.
Из литералов, идентификаторов, операций и специальных символов строятся выражения. Выражения предназначены для того, чтобы вычис лить значение либо достичь каких-либо побочных эффектов. Операторы определяют и контролируют то, что и как делает про грамма. Операторы языка C++ делятся на: операторы-выражения, объявле ния, составные операторы (блоки), операторы выбора, циклы, операторы перехода и операторы обработки исключений. Потребность остановиться на используемой в книге терминологии вызвана прежде всего тем, что в имеющейся литературе по языку С++ встречается противоречивое употребление основных терминов. В большей степени это связано с тем, что в разных контекстах оригинальные термины даются в разных переводах. При этом из-за вольностей перевода многие особенности синтаксиса языка стираются. Основные терминологические проблемы возникают вокруг трех понятий: - operator (в переводе встречаются варианты: «оператор» и «операция»); - expression («выражение»); - statement (в переводе встречаются варианты: «инструкция» и «оператор»). В русскоязычной литературе строгое определение понятия «оператор» отсутст вует. В силу особенностей перевода в русскоязычной литературе, особенно переводной, именно для именования инструкций применяется термин «оператор». Но при этом оператором называют и знаки операций +, – и т. д. Некоторые авторы даже оправдывают это тем, что трудно перепутать оператор + с оператором цикла. С этим можно поспорить хотя бы в случае с оператором присваивания, поскольку с точки зрения синтаксиса инструкция присваивания – это оператор присваивания, завершающийся точкой с запятой. Следует также заметить, что при этом некоторые авторы используют термин «перегрузка операции», который непонятно, что обозначает, если не вводится понятие «операция». Можно согласиться, что в каждом конкретном контексте легко однозначно опре делить, о чем идет речь. Но если изучаемый язык программирования интересует нас не только как инструмент создания программ, но и как объект для понимания принципов и методов компиляции, необходимо внести формализм в используемую терминологию. Размышляя над проблемами терминологии, авторы решили, что проще изменить перевод англоязычных терминов, чтобы использовать привычные понятия. 1.2. Первые шаги Прежде всего отметим первое правило. Язык С++ (как и язык С) чувствителен к регистру. В нем различаются символы верхнего и нижнего регистров.
Пример 1. Реализовать программу, выводящую на экран фразу «Hello, world!». Программа «Hello, world!» в виде консольного приложения – типич ный пример, упоминаемый практически во всех учебниках. Текст этой про граммы на языке С++ выглядит следующим образом: #include <iostream> int main(){ std::cout << "Hello, world!" << std::endl; return 0; } Первая строка содержит директиву препроцессора: #include <iostream> В языке С++ используются специальные файлы заголовков (header), которые содержат информацию, необходимую компилятору. Директива препроцессора #include сообщает о том, какой заголовочный файл дол жен быть включен в исходный текст программы. В старых (до стандарта 1998 г.) версиях компиляторов языка С++ за головочные файлы стандартной библиотеки имеют расширение .h, которое употреблялось ранее в языке С. В этом случае директива препроцессора будет выглядеть так: #include <iostream.h> Подключение файла <iostream> необходимо для того, чтобы можно было использовать для вывода объект cout. Наиболее просто организовать ввод-вывод в программах на С++, используя стандартные потоковые объ екты cin и cout. Эти объекты связаны со стандартными устройствами консольного ввода и вывода – клавиатурой и дисплеем. Поскольку имена cin и cout в приводимой программе не описаны, необходимо указать пространство имен, в котором они определены. Все стандартные идентификаторы С++ определены в пространстве имен std.