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

Объектно-ориентированное программирование в С++: лекции и упражнения

Покупка
Артикул: 637400.01.99
На доступном для начинающего программиста уровне изложены концепция объектно-ориентированного программирования (ООП) и сведения необходимые для быстрого освоения языка программирования С++. Информация в книге расположена в порядке усложнения: от спо- собов написания простейших программ, имеющих линейную структуру, до достаточно сложных, с использованием библиотеки STL. Большое внимание уделено вопросам работы с функциями, которые являются основой для перехода к ООП. Приведены многочисленные примеры, контрольные вопросы и практические задания. Для студентов, изучающих язык программирования С++, препода- вателей соответствующих специальностей и всех, кто хочет самостоя- тельно освоить программирование на языке С++.
Ашарина, И. В. Объектно-ориентированное программирование в С++: лекции и упражнения / Ашарина И.В. - Москва :Гор. линия-Телеком, 2012. - 320 с.: ISBN 978-5-9912-7001-4. - Текст : электронный. - URL: https://znanium.com/catalog/product/559706 (дата обращения: 25.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
И.В.Ашарина 
 
 
 
 
 
 
Объектно-ориентированное 
программирование в С++: 
лекции и упражнения 
 

 
 
 
 
 
Допущено УМО вузов по университетскому политехническому 
образованию в качестве учебного пособия для студентов высших 
учебных заведений, обучающихся по направлению подготовки 
дипломированных специалистов 654600 (230100) – «Информатика и 
вычислительная техника" 
 
 
 
 
 
 
 
Москва 
Горячая линия – Телеком 
2012 

УДК 681.3 
ББК 32.97 
    А98 
 
Р е ц е н з е н т :  канд. техн. наук, доцент  В. А. Мартынюк 

 

Ашарина И. В. 
А98        Объектно-ориентированное программирование в С++: лекции 
и упражнения.Учебное пособие для вузов.– М.: Горячая линия – 
Телеком, 2012. – 320 c.: ил. 

ISBN 978-5-9912-7001-4. 

На доступном для начинающего программиста уровне изложены 
концепция объектно-ориентированного программирования (ООП) и 
сведения необходимые для быстрого освоения языка программирования 
С++. Информация в книге расположена в порядке усложнения: от способов написания простейших программ, имеющих линейную структуру, 
до достаточно сложных, с использованием библиотеки STL. Большое 
внимание уделено вопросам работы с функциями, которые являются 
основой для перехода к ООП. Приведены многочисленные примеры, 
контрольные вопросы и практические задания. 
Для студентов, изучающих язык программирования С++, преподавателей соответствующих специальностей и всех, кто хочет самостоятельно освоить программирование на языке С++.  
ББК 32.97 

 
Адрес издательства в Интернет www.techbook.ru 
 
Учебное электронное издание 
Ашарина Ирина Владимировна 

Объектно-ориентированное программирование в С++:  
лекции и упражнения 

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

Редактор  А. Н. Иванов 
Компьютерная верстка  В. Н. Панкин 
Обложка художника  В. Г. Ситникова 

Подписано в печать 14.09.07.   Формат 6090/16.   Печать офсетная 
Уч.-изд. л. 20.   Тираж 1000 экз.   Изд. № 7285 
ООО «Научно-техническое издательство «Горячая линия – Телеком» 

ISBN 978-5-9912-7001-4                                             И. В. Ашарина, 2008, 2012 
                   Оформление  издательства «Горячая линияТелеком», 2008, 2012 

ПРЕДИСЛОВИЕ 

Язык С++ относится к классу универсальных языков, поскольку с его 
помощью можно решить очень широкий круг задач, выполняемых на 
ЭВМ. Среди современных алгоритмических языков язык С++ является, 
пожалуй, одним из самых популярных и распространенных, но наиболее 
эффективно его применение в написании системных программтрансляторов, операционных систем, экранных интерфейсов, в обслуживании инструментальных средств.  
В большинстве случаев программы, выполненные на языке С++, по 
быстродействию сравнимы с программами, написанными на Ассемблере. 
С++ – язык высокого уровня, поэтому программы, подготовленные на 
нем, более наглядны и просты в сопровождении.  
Программы на языке С++ легко переносимы с одного типа компьютера на другой. 
Основные особенности языка С++ следующие: 
• 
в нем реализованы некоторые операции низкого уровня; 
• 
его базовые типы данных совпадают с типами данных языка Ассемблера; 
• 
несмотря на присутствие таких составных объектов, как массивы 
и структуры, язык не допускает обращения с ними как с единым циклом; 
• 
широко использует указатели на переменные и функции; 
• 
удобным средством для передачи параметров являются ссылки; 
• 
считается языком для профессионалов, поэтому многое «доверяет» 
программисту: даже на такие важные действия, как преобразование 
типов, налагаются лишь незначительные ограничения; 
• 
несмотря на широкие возможности, невелик по объему за счет того, 
что практически все выполняемые функции оформлены в виде подключаемых библиотек. 

Язык С служит базовой платформой для изучения языка С++. Эти 
два языка имеют так много общих черт, что с методической точки зрения 
оказывается целесообразным первые темы данного конспекта лекций посвятить изучению языка С, а затем перейти к рассмотрению возможностей, предоставляемых языком С++. 
Язык С был разработан в США сотрудниками Bell Laboratories 
Б. Керниганом и Д. Ритчи и использован для создания ОС UNIX. Во избежание неоднозначных трактовок окончательный вариант был утвержден в качестве стандарта ANSI C. 
С++ обязан своим появлением сотруднику Bell Laboratories Б. Страуструппу. 

Объектно-ориентированное программирование в С++ 

В книге приведены многочисленные и реально работающие примеры, которые позволяют начинающим программистам взять за основу 
программу из примера и, модифицируя ее, более качественно осваивать 
язык программирования. 
В конце каждой главы приведены контрольные вопросы. Большая 
часть глав имеет также практические задания, что делает книгу интересной для преподавателей, читающих курсы, связанные с программированием на языках высокого уровня. 
Книга предназначена для студентов и аспирантов, изучающих вопросы, связанные с программированием, и преподавателей соответствующих 
курсов. 

ГЛАВА 1. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ ЯЗЫКА С++ 

1.1. Алфавит языка 

Алфавитом языка называют присущий данному языку набор символов, из которых формируются все конструкции языка. 
При использовании любого языка (в том числе и языка программирования) необходимо следить за тем, чтобы все произносимое или написанное 
было корректно с точки зрения алфавитных конструкций (т. е. синтаксически) и имело определенный смысл (т. е. обладало семантикой). 
Переводом программы с языка, на котором она написана, на машинный язык и анализом ее синтаксиса занимается программа-компилятор. 
Иногда компилятор называют более общим термином – транслятор. 
Для обозначения (идентификации) всех объектов, вводимых в программу, используются идентификаторы, или имена. Здесь под объектами понимаются переменные, константы, типы, подпрограммы и т. д. 
Идентификаторы начинаются с латинской буквы и могут содержать латинские буквы, цифры и знаки подчеркивания. Идентификаторы могут 
начинаться и со знака подчеркивания, но пользоваться такими именами 
нужно с большой осторожностью во избежание совпадения идентификаторов, создаваемых программистом, с именами, содержащимися в стандартных библиотеках. 
Ключевые (служебные, зарезервированные) слова имеют однозначно 
определенный смысл и могут использоваться только так, как это задано в 
языке программирования. Ключевые слова не могут быть переопределены, т. е. их нельзя использовать в качестве имен, вводимых программистом. 
Алфавит языка С (С++) включает: 
• 
прописные латинские буквы A . . . Z; 
• 
строчные латинские буквы a . . . z; 
• 
арабские цифры 0 . . . 9; 

• 
разделители: , , ., ;, ?, ', !, ¦, /, \, ∼, _, #, %, &, ∧, =, –, +, ∗, (, ), {, }, [, ], 
<, >; 
• 
пробельные символы: SP, H_TAB, CR, LF, V_TAB, FF, Ctrl-Z (конец 
текстового файла); 
• 
специальные символы, необходимые для представления символов, не 
имеющих графического обозначения, а также пробельных символов; 
наиболее употребительные специальные символы представлены 
в табл. 1.1. 

Объектно-ориентированное программирование в С++ 

Таблица 1.1. Наиболее употребляемые специальные символы 

Символ 
Описание 

\n 
Новая строка (LF) 

\t 
Горизонтальная табуляция (H_TAB) 

\r 
Возврат каретки (CR) 

\f 
Новая страница (FF) 

\a 
Звуковой сигнал 

\' 
Апостроф  

\» 
Кавычки 

\\ 
Обратная косая черта (back slash) 

Компилятор языка С (С++) воспринимает одну и ту же прописную 
и строчную латинскую букву как различные символы. То есть имена 
MyProgram, MYPROGRAM и myprogram C-компилятор будет трактовать 
как три различных имени. 
Директива препроцессора – это инструкция, записанная в исходном 
тексте С++-программы и выполняемая препроцессором. Препроцессор 
просматривает программу до процесса компиляции, подключает необходимые файлы, заменяет символические аббревиатуры в программе на соответствующие директивы и т. д. Строка, содержащая директиву препроцессора, начинается с символа «#» и не имеет точки с запятой в конце. 
В программах на C++ предусмотрено использование комментариев, 
т. е. пояснительного текста, который не транслируется и, следовательно, 
не влияет на ход выполнения программы. Для оформления однострочных 
комментариев в языке С++ используются две наклонные черты, для многострочных комментариев – конструкция /*. . .*/: 
 
// Однострочный комментарий в С++ 
/* Многострочный 
                комментарий в С++*/ 

1.2. Структура программы на языке С++ 

По традиции первая программа на С (С++) пишет фразу «Здравствуй, 
мир!». Мы не будем нарушать эту традицию. 

Пример 1.1: 
# include <iostream> 
 
// директива препроцессора 
using namespace std; 
 
// директива using 
int main() 
 
// начало программы 
{ cout<<"Здравствуй, мир!\n"; // оператор вывода на экран 
   return 0; 
} 

Директива #include <iostream> подключает заголовочный файл 
iostream, который обеспечивает работу с переменной cout и операцией << 
путем предоставления доступа к потокам ввода-вывода; 

Глава 1. Основные определения языка С++ 
7 

using namespace std; обозначает, что используется пространство имен 
с именем std. Пространство имен – это некоторая объявляемая область 
видимости имен. Она необходима, чтобы избежать конфликтов идентификаторов; 
main ( ) – имя основной программы, оно всегда присутствует и не 
может изменяться; 
{ } – скобки, ограничивающие тело программы; 
cout<<«Здравствуй, мир!\n»; – оператор, выводящий на экран строку, 
заключенную в кавычки; 
return 0; – пока будем считать, что этот оператор необходим для корректного завершения программы. 

Каждый оператор завершается символом «точка с запятой», который 
является атрибутом оператора, указывающим на его конец. 

Пример 1.2. Рассмотрим программу, содержащую элементы вычислений. 
 
# include <iostream> 
using namespace std; 
int main() 
{ int  a, b, c; 
// объявление трех переменных целого типа 
   a = 5; b = 10; 
// определение переменных a и b 
   c = a+b; 
// присваивание переменной c суммы a и b 
   cout<<"Значение с = "<<с<<'\n'; 
   return 0; 
} 

В целом структура программы не изменилась, но добавились некоторые моменты: 
int a,b,c; – объявление трех целочисленных переменных a, b и с; int – 
признак того, что переменные имеют целый тип; 
общим правилом при программировании на C++ является то, что 
прежде, чем использовать в программе какую-либо переменную, ее необходимо объявить с указанием типа; 
а=5, b=10; – определение переменных a и b. Объявление переменной 
приводит к тому, что для нее отводится место в памяти согласно объявленному типу. Определение переменной приводит к присваиванию ей 
конкретного значения.  
Можно одновременно объявить и определить переменную. Такой 
способ называется инициализацией. То есть можно написать: 
int а=5, b=10; 

В результате работы программы будет напечатана строка 
Значение с=15 
и курсор окажется на следующей строке благодаря наличию управляющего символа \n в операторе вывода на экран. Эффекта перевода курсора 

Объектно-ориентированное программирование в С++ 

на новую строку можно добиться путем использования манипулятора 
endl, который, кроме перевода курсора, выполняет еще и очистку буфера 
строки. Использование манипулятора endl здесь более предпочтительно, 
чем управляющих символов. Манипулятор представляет собой особую 
инструкцию, которая предназначена для изменения формата вывода данных на экран. 
Программа оказывается более гибкой, если значения переменным не 
присваивать в теле программы, а вводить с клавиатуры. 

Пример 1.3: 
# include <iostream> 
using namespace std; 
int main() 
{float m, p, q; 
// объявление трех вещественных переменных 
  cout<<"Введите значение p "; 
  cin>>p; 
  cout<<"Введите значение q "; 
  cin>>q; 
  m=p/q; 
  cout<<"m = "<<m<<endl; 
  return 0; 
} 

Здесь приведены простейшие программы, однако они позволяют сделать выводы о структуре программы на C++: 
• 
любая программа может содержать (и скорее всего, содержит) заголовочные файлы, подключенные директивой #include; 
• 
программа всегда начинается словом main(); 
• 
перед использованием переменной ее необходимо объявить с указанием типа. 

Контрольные вопросы 

1. Что представляет собой алфавит языка? 
2. Что понимают под словами «синтаксис» и «семантика»? 
3. Дать определение компилятора. 
4. Для чего нужны идентификаторы? 
5. Перечислить особенности ключевых слов. 
6. Что такое препроцессор? 
7. Что содержится в заголовочных файлах и как можно подключить их?  
8. Как ввести и как вывести данные в С++-программе? 
9. Как объявляют переменные целого и вещественного типа? 

Практические задания 

1. Все ли правильно в приведенной ниже программе? 
 
# include <iostream> 
using namespace std; 

Глава 1. Основные определения языка С++ 
9 

int main() 
{ int  m, k; 
   m = k+2; 
   cout>>m; 
} 
 
2. Исправить ошибки, если они есть. 
 
# include <iostream> 
using namespace std; 
int main() 
 {float r; 
  cout<<"Введите значение a "; 
  cin>>a; 
  cout<<"Введите значение b "; 
  cin>>b; 
  r=a*b; 
  cout<<"r = "<<r<<endl; 
  return 0; 
} 
 
3. Вычислить среднее арифметическое четырех значений, введенных 
с клавиатуры. 
 
4. Что будет выведено на экран в результате работы следующей программы, если введены значения 13 и 4? 
 
# include <iostream> 
using namespace std; 
int main() 
{int p, l, m; 
cout<<"Введите значение m "; 
  cin>>m; 
  cout<<"Введите значение l "; 
  cin>>l; 
  l = 2; m = 9; 
  p = m + l; 
  cout<<"p = "<<p<<endl; 
  return 0; 
} 

ГЛАВА 2. СТАНДАРТНЫЕ ТИПЫ ДАННЫХ 

Язык С++ является типизированным языком с той точки зрения, что 
каждая используемая переменная должна быть объявлена с указанием 
типа, чтобы занять для нее достаточно места в оперативной памяти ЭВМ.  
Переменная представляет собой имя, связанное с областью памяти, 
которая отведена для хранения значения этой переменной. Все переменные в программе, написанной на языке С++, должны быть объявлены до 
их использования этой программой.  

2.1. Переменные целого типа 

Переменные целого типа используются для работы с дискретными 
объектами. В языке C++ имеется несколько целых типов данных: short, 
int, long. Наиболее часто используется тип int. Этот тип является системно-зависимым: в MS DOS и в ранних версиях Windows он занимает 
2 байта, в 32-разрядных ОС – 4 байта. 
В языке С++ используются как знаковые, так и беззнаковые переменные. Все целые типы – char, short, int и long – являются знаковыми по 
умолчанию, но можно объявить их как беззнаковые, которые, занимая 
тот же объем памяти, что и их знаковые аналоги, представляют только 
положительные значения, включая нуль. Вследствие этого они могут 
представлять вдвое больше положительных значений (табл. 2.1).  
Тип char (символьный) тоже может интерпретироваться как целый. 
Этот тип, хотя и предназначен для представления символов, может поддерживать целочисленные значения в диапазоне от –128 до 127 или от 0 
до 255. Значения символьных переменных записываются в одинарных 
кавычках. 

Таблица 2.1. Целочисленные типы данных 

Тип данных 
Размер, байт 
Нижняя граница 
диапазона 
Верхняя граница 
диапазона 

[signed] char 
1 
–128 
127 

unsigned char 
1 
0 
255 

[signed] short 
2 
–32 768 
32 767 

unsigned short 
2 
0 
65 535 

2 
–32 768 
32 767 
[signed]  
 int 
4 
–2 147 483 648 
2 147 483 647 

2 
0 
65 535 
unsigned 
 int 
4 
0 
4 294 967 295 

[signed] long 
4 
–2 147 483 648 
2 147 483 647 

unsigned long 
4 
0 
4 294 967 295