Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

С++ как второй язык в обучении приемам и технологиям программирования

Покупка
Основная коллекция
Артикул: 633206.01.99
Доступ онлайн
65 ₽
В корзину
В данном учебном пособии внимание уделяется языку С++ и использованию объектно-ориентированного подхода. Оно состоит из трех модулей и проектных заданий к ним. Для закрепления знаний к каждому модулю даны вопросы для рубежного контроля, а также задания для самостоятельной работы. Адресовано студентам, обучающимся по бакалаврской программе по направлению «Прикладная математика и информатика».
Русанова, Я. М. С++ как второй язык в обучении приемам и технологиям программирования: учеб. пособие / Я. М. Русанова. - Ростов-на-Дону: Издательство ЮФУ, 2010. - 200 с. - ISBN 978-5-9275-0749-8. - Текст : электронный. - URL: https://znanium.com/catalog/product/550811 (дата обращения: 23.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Министерство образования и науки 
РОССИЙСКОЙ ФЕДЕРАЦИИ 
Федеральное государственное автономное 
образовательное учреждение высшего профессионального образования 
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ» 
 
 
 
 
 
 
 
 

Я. М. РУСАНОВА, М. И. ЧЕРДЫНЦЕВА 

 

 

 

С++   КАК   ВТОРОЙ   ЯЗЫК   В   
ОБУЧЕНИИ   ПРИЕМАМ   И   
ТЕХНОЛОГИЯМ   ПРОГРАММИРОВАНИЯ 

 

Учебное   пособие 

 
 
 
 
 
 
 
 
 
 
Ростов-на-Дону 
Издательство Южного федерального университета 
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. 

При обращении к объектам, объявленным в этом пространстве, имя 

пространства имен может быть указано явно. Для этого используется опе
рация разрешения области видимости ::. Такой способ удобно использо
вать, если к какому-то пространству имен потребуется одно-два обраще
ния. В противном случае, чтобы не загромождать текст программы, лучше 

выносить объявление необходимого пространства имен, используя опера
тор using namespace. 

Тогда текст программы «Hello, world!» будет выглядеть так: 

#include <iostream> 
using namespace std; 
int main() { 
  cout << "Hello, world!" << endl; 
  return 0; 
} 

Использование пространств имен позволяет не заботиться о возмож
ности употребления одинаковых имен для разных объектов при организа
ции больших программ. 

Для вывода используются объект cout и операция <<. Операция << 

может использоваться последовательно многократно. Символьные строки 

при выводе должны заключаться в двойные кавычки. Манипулятор endl 

(определен в пространстве имен std) очищает буфер вывода и добавляет в 

поток cout символ новой строки. 

Выполнение программы на С++ всегда начинается с вызова функции с 

именем main(). 

Функция main() должна вернуть управление операционной системе 

после своего завершения и сообщить код возврата. В случае аварийного за
вершения операционной системе будет сообщено ненулевое целочисленное 

значение – код ошибки (код возврата). В случае безошибочной работы 

нужно возвратить признак нормального завершения 0. Именно поэтому в 

заголовке функции main() указано, что возвращаемый ею результат дол
жен быть целого типа, а последним оператором тела функции 

main()является оператор возврата: 

return 0; 

Пример 2. Найти максимум из последовательности n вводимых 

целых чисел. 

Рассмотрим текст программы FindMax.cpp. Например, он будет 

выглядеть следующим образом: 

// FindMax.cpp  
#include <iostream> 
using namespace std; 
int main() { 
  int n, max; 
  cout<<"Input n"<<endl; 
  cin>>n; 
  cout<<"Input "<<n<<" elements"<<endl; 
  cin>>max; 
  for ( int i=1;i<n;i++) { 
    int x; 
    cin>>x; 
    if (x>max) 
      max=x; 
  } 
  cout<<"Maximum = "<<max<<endl; 
  return 0; 
} 

В операторах ввода-вывода указываются имена стандартных потоко
вых объектов cin и cout. 

  cout<<"Input n"<<endl; 
  cin>>n; 
  cout<<"Input "<<n<<" elements"<<endl; 
  cin>>max; 

Эти объекты связаны со стандартными устройствами консольного 

ввода и вывода – клавиатурой и дисплеем. 

Для ввода данных объект cin использует операцию >>. Справа от 

этого знака находится переменная, принимающая вводимую информацию. 

Доступ онлайн
65 ₽
В корзину