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

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

Покупка
Артикул: 106956.03.99
На доступном для начинающего программиста уровне изложены концепция объектно-ориентированного программирования (ООП) и сведения необходимые для быстрого освоения языка программирования C++. Информация в книге расположена в порядке усложнения: от способов написания простейших программ, имеющих линейную структуру. до достаточно сложных, с использованием библиотеки STL. Большое внимание уделено вопросам работы с функциями, которые являются основой для перехода к ООП. Приведены многочисленные примеры, контрольные вопросы и практические задания. Для студентов, изучающих язык программирования С++. преподавателей соответствующих специальностей и всех, кто хочет самостоятельно освоить программирование на языке C++.
Ашарина, И.В. Объектно-ориентированное программирование в C++: лекции и упражнения : учеб. пособие для вузов / И.В. Ашарина. - 2-е изд., перераб. и доп. - Москва : Горячая линия - Телеком, 2017. - 336 с. - ISBN 978-5-9912-0423-1. - Текст : электронный. - URL: https://znanium.ru/catalog/product/1040247 (дата обращения: 28.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Москва
Горячая линия – Телеком

2017

2-е издание, переработанное и дополненное

УДК 681.3 
ББК 32.97 
    А98 

Р е ц е н з е н т :  канд. техн. наук, доцент  В. А. Мартынюк 

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

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

Адрес издательства в Интернет www.techbook.ru 

Все права защищены.
Любая часть этого издания не может быть воспроизведена в какой бы 
то ни было форме и какими бы то ни было средствами без письменного 
разрешения правообладателя
© ООО «Научно-техническое издательство «Горячая линия – Телеком»
www.techbook.ru
© И. В. Ашарина 

ПРЕДИСЛОВИЕ 

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

Язык С служит базовой платформой для изучения языка С++. Эти
два языка имеют так много общих черт, что с методической точки зрения 
оказывается целесообразным первые темы данного конспекта лекций посвятить изучению языка С, а затем перейти к рассмотрению возможностей, предоставляемых языком С++. 
Язык С был разработан в США сотрудниками 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 "stdafx.h"  
 
// директивы препроцессора 
#include <iostream> 
#include <conio.h> 
using namespace std;  
 
// директива using 
int _tmain(int argc, _TCHAR* argv[]) 
// начало программы 
{ cout<<" Hello, World!\n"; 
 
// оператор вывода на экран 
   return 0; 
} 
 
 
// конец программы 

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

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

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

Пример 1.2. Рассмотрим программу, содержащую элементы вычислений. 
#include "stdafx.h" 
#include <iostream> 
#include <conio.h> 
using namespace std; 
int _tmain(int argc, _TCHAR* argv[]) 
{  int  a, b, c; 
// объявление переменных целого типа 
   a = 5; b = 10; 
// определение переменных a и b 
   c = a+b; 
// присваивание переменной c суммы a и b 
   cout<<"Value с = "<<c<<'\n'; 
   _getch(); 
// подключается с помощью заголовочного файла conio.h,  
// останавливает выполнение программы до нажатия любой клавиши 
   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 "stdafx.h" 
#include <iostream> 
#include <conio.h> 
using namespace std; 
int _tmain(int argc, _TCHAR* argv[]) 
{ double m, p, q;  
// объявление  переменных  вещественного типа  
  cout<<"Input p "; 
  cin>>p; 
  cout<<"Input q "; 
  cin>>q; 
  m=p/q; 
  cout<<"m = "<<m<<endl; 
  _getch(); 
  return 0; 
} 
Можно этот пример переписать короче. 

Пример 1.4 
#include "stdafx.h" 
#include <iostream> 
#include <conio.h> 
using namespace std; 
int _tmain(int argc, _TCHAR* argv[]) 
{ double m, p, q; 
  cout<<"Input p and q: "; 
  cin>>p>>q; 
  m=p/q; 
  cout<<"m = "<<m<<endl; 
  _getch(); 
  return 0;  } 

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

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

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

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

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

1. Все ли правильно в приведенной ниже программе? 
 
# include <iostream> 
using namespace std; 
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 _tmain() 
{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; 
}