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

Язык СИ++

Покупка
Артикул: 002447.14.99
Доступ онлайн
200 ₽
В корзину
Подробно рассмотрены синтаксис, семантика и техника программирования объектно-ориентированного языка Си++. Приведено большое количество программ, иллюстрирующих возможности и особенностии языка Си++. В отличие от работ, в которых язык Си++ вводится как расширение своего предшественника языка Си, в данной книге он рассматривается как самостоятельный язык программирования. Для изучения материала достаточно, если читатель владеет основами информатики и навыками программирования на любом алгоритмическом языке в объеме стандартного курса по программированию для среднего учебного заведения (4-е издание - 1999 г.). Для студентов, преподавателей, лицеистов, школьников, а также для специалистов, желающих самостоятельно изучить язык Си++.
Подбельский, В. В. Язык СИ++ : учебное пособие / В. В. Подбельский. - 5-е изд. - Москва : Финансы и статистика, 2022. - 560 с. - ISBN 978-5-00184-082-4. - Текст : электронный. - URL: https://znanium.ru/catalog/product/1987543 (дата обращения: 29.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
В.В. Подбельский





                ЯЗЫК СИ++





        5-е издание

       Рекомендовано Министерством образования Российской Федерации в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлениям «Прикладная математика» и «Вычислительные машины, комплексы, системы и сети»








                     ФИНАНСЫ И СТАТИСТИКА МОСКВА 2022

УДК 004.438Си(075.8)
ББК 32.973.26-018 1я73
     П44





РЕЦЕНЗЕНТЫ:
Кафедра управления моделирования систем Московской государственной академии приборостроения и нформатики;
Ю.Г. Дадаев, доктор технических наук, профессор







       Подбельский В.В.
П44 Язык Си++: учеб. пособие. — 5-е изд.— М.: Финансы и статистика, 2022. — Режим доступа: https://finstat.ru/wp-content/uploads/2022/12/Podbelskiy-Yazyk_C_plus_plus.pdf, ограниченный. — Загл. с экрана. — 560 с.: ил.

          ISBN 978-5-00184-082-4

           Подробно рассмотрены синтаксис, семантика и техника программирования объектно-ориентированного языка Си++. Приведено большое количество программ, иллюстрирующих возможности и осо-бенностии языка Си++. В отличие от работ, в которых язык Си++ вводится как расширение своего предшественника языка Си, в данной книге он рассматривается как самостоятельный язык программирования. Для изучения материала достаточно, если читатель владеет основами информатики и навыками программирования на любом алгоритмическом языке в объеме стандартного курса по программированию для среднего учебного заведения (4-е издание — 1999 г.).
           Для студентов, преподавателей, лицеистов, школьников, а также для специалистов, желающих самостоятельно изучить язык Си++.


УДК 004.438Си(075.8)
                                                    ББК 32.973.26-018 1я73


                                            © Подбельский В.В., 1995, 1999, 2022
                                            © ООО «Издательство «Финансы

ISBN 978-5-00184-082-4

и статистика», 2022

        ПРЕДИСЛОВИЕ К 5-му ИЗДАНИЮ

  Отзывы читателей и опыт использования предыдущих изданий пособия в учебных заведениях разных уровней (школы с математическим уклоном, колледжи, университеты) показали, что замысел автора об ориентации на читателей, не знакомых с программированием на Си и/или на Си++, реализован в книге достаточно успешно. Пособие предназначено и пригодно для изучения языка Си++ "с нуля”. Книга позволяет читателю не только изучить язык Си++, но и проследить его происхождение от языка Си. Так как язык Си является подмножеством языка Си++, то, изучая Си++ по данному пособию, читатель почти без каких-либо дополнительных усилий осваивает средства и механизмы его предшественника - языка Си. Таким образом, книга не замкнута на высокоуровневые механизмы языка Си++, а подробно знакомит читателей и с базовыми аппаратно ориентированными средствами системного программирования, унаследованными от Си (работа с указателями, особенности представления в стиле Си массивов и строк, возможности битовых полей, объединений, средств адресации памяти -"адресная арифметика" и т.д.).
  Теперь несколько слов об эволюции языка Си+ + . В 1998 г. произошло долгожданное событие - Международный комитет по стандартизации принял стандарт языка Си++ (ISO/IEC 14882 "Standard for the C++ Programming Language"). Возможности, которые при подготовке первого издания пособия только обсуждались (исключения, динамическая идентификация типов и др., см. главу 11), стали обязательными элементами Си++. Работы над "Стандартом" велись в течение нескольких лет, и его промежуточные варианты были постоянно доступны для пользователей языка и для авторов компиляторов. Это привело к замечательному результату: не произошло задержки между утверждением "Стандарта" и его практическим внедрением. Современные версии компиляторов реализуют практически все возможности, заложенные в язык Си++. К счастью для программистов, "Стандарт" и компиляторы обеспечили и преемственность средств языка. Программы, написанные до официального утверждения "Стандарта", сохраняют работоспособность и при тех требованиях, которые предъявил к текстам программ на Си + + утвержденный "Стандарт".

Язык Си++

   Итак, ’’Стандарт” добавил к языку новые возможности, но не вычеркнул из него хорошо зарекомендовавшие себя базовые механизмы, подробно описанные в данном пособии. Более того, ’’Стандарт” не ввел в язык неожиданных средств, которые ранее не обсуждались в публикациях и не были опробованы в промышленных компиляторах. К сожалению, введение ’’Стандарта" не уменьшило описания самого языка. Объем официального издания ’’Стандарта” - 748 страниц. Объем нового 3-го издания классической работы Bjarne Stroustrup "The C++ Programming Language", подробно рассматривающей средства Си++, утвержденные "Стандартом", вырос почти до 1000 страниц. Поэтому автор настоящего пособия не решился следовать этому примеру, а оставил книгу в прежнем объеме.


        ПРЕДИСЛОВИЕ К 1-му ИЗДАНИЮ

   Язык программирования Си++ был разработан на основе языка Си Бьярном Страуструпом (Bjarne Stroustrup) и вышел за пределы его исследовательской группы в начале 80-х годов [1]. На первых этапах разработки (1980 г.) язык носил условное название "Си с классами", а в 1983 г. Рик Маскитти придумал название "Си+ + ", что образно отразило происхождение этого нового языка от языка Си. Язык Си++ является расширением (надмножеством) языка Си, поэтому программы, написанные на Си, могут обрабатываться компилятором языка Си++. В программах на языке Си++ можно использовать тексты на языке Си и обращаться к библиотечным функциям языка Си. Таким образом, одно из достоинств Си + + состоит в возможности использовать уже существующие программы на Си. Однако это не единственное достоинство языка. Как пишет его автор [2], язык Си++ был создан, чтобы улучшить язык Си, поддержать абстракцию данных и обеспечить объектно-ориентированное программирование.
   Настоящая работа посвящена синтаксису, семантике, технике и стилю построения программ языка Си++. На русском языке существует несколько хороших книг по языку Си++ для тех, кто уже программирует на языке Си. В отличие от этих книг, в которых язык Си++ вводится как расширение своего предшественника Си, настоящая работа не требует от читателя знакомства с языком Си. Другими словами, материал книги по возможности "замкнут" и содержит всю необходимую информацию для фундаментального освоения языка Си++ как нового для читателя языка программирования. Например, книгу может изучать читатель, знакомый с языком Паскаль, или Бейсик, или Фортран, или ПЛ/1 и т.п. Знакомство с языком Си никак не повредит читателю, но изложение материала этого не предполагает. Итак, язык Си + + излагается как новый язык, свойства которого раскрываются перед

Предисловие к 1-му изданию

5

читателем постепенно. Здесь мы полностью следуем совету: ’’...программируя на Си++, нужно... не применять те средства языка, которые представляются вам неясными, как и те, с которыми вы еще не успели ознакомиться” [2].
   Приведем несколько пояснений. Изложение в начальных главах до некоторой степени конспективное, но все разбираемые вопросы сопровождаются примерами. При выборе примеров оказалось весьма непросто ограничиваться только уже рассмотренными средствами языка и ”не забегать вперед”. В тех случаях, когда новые конструкции появляются в примерах до их определения, они тщательно объясняются и комментируются. Тем самым читатель получает возможность неформального предварительного знакомства с некоторыми важными и широко используемыми конструкциями языка Си+ + , синтаксис которых описывается позже. Приводимые программы в основном отлаживались и выполнялись в интегрированной среде Borland C++ и Turbo C++.
   Несмотря на то что в книге изложены практически все основные принципы, средства и механизмы языка Си++, необходимые для объектно-ориентированного программирования, мы не стали только ради моды наспех говорить о технологии объектно-ориентированного программирования на языке Си + + . Объектно-ориентированное программирование может эффективно использоваться, если ему предшествуют объектно-ориентированный анализ задачи и объектно-ориентированное проектирование программного комплекса. Без объектно-ориентированного проекта попытки применения объектно-ориентированного программирования будут по меньшей мере малоэффективны и весьма трудоемки. В настоящее время существуют фундаментальные работы, посвященные объектно-ориентированному анализу и проектированию систем [15]. Однако требовать от читателя предварительного знакомства с этой областью системотехники и системного анализа было бы слишком опрометчиво. Да этого и не нужно. Средства языка Си++ настолько интересны и богаты, что их следует использовать и не только в русле объектно-ориентированного программирования. Достаточно обратить внимание на поддержку принципов абстракции данных, предоставляемую языком Си++ с помощью механизма классов, чтобы убедиться в целесообразности применения Си + + и вне реализации того или иного объектно-ориентированного проекта.
   Не повторяя как заклинания термины объектно-ориентированной методологии ("инкапсуляция", "полиморфизм", "иерархичность", "типизация" и т.д.), можно в создаваемых программах использовать промышленные библиотеки классов (одна из них описана в главе 11), вводить собственные типы данных, соответствующие решаемым задачам, и тем самым постепенно и совершенно естественным образом

Язык Си++

осваивать стиль и средства объектно-ориентированного программирования на Си++. Дальнейшее продвижение в этом направлении будет определять та ситуация, в которой находится читатель, и тот интерес, который он проявляет собственно к объектно-ориентированной методологии и языку Си+ + . Отметим только, что этапа изучения конструкций языка миновать нельзя, ибо невозможно правильно написать объектно-ориентированную программу на Си + + , если испытываешь трудности при применении базовых конструкций (описаний, операторов, выражений и т.д.). Тут уж не поможет даже хорошая проработка исходной задачи и качественно выполненное объектно-ориентированное проектирование программы. Проводя аналогию с другой областью человеческого творчества, скажем так: можно написать хорошую повесть, делая ошибки в правописании и надеясь на помощь корректора, однако синтаксических ошибок в тексте программы не прощает ни один компилятор, а их исправление требует знания грамматики языка.
   Пособие написано для специальностей ’’Прикладная математика”, ’’Вычислительные машины, комплексы, системы и сети", а также для студентов других специальностей, профессионально изучающих программирование. Им можно пользоваться и при самостоятельном изучении языка Си++. Для успешного усвоения материала пособия от читателя требуются знания основ информатики и некоторые навыки программирования на каком-либо алгоритмическом языке.
   Материал для главы 12, посвященной исключительным ситуациям, автору помог подобрать С.Г. Чернацкий. Им же написаны и отлажены некоторые программы, помещенные в главе 12.
   В заключение предисловия несколько слов о той помощи, которую получил автор и за которую он глубоко признателен. Студенты факультета прикладной математики (ФПМ) Московского государственного института электроники и математики (МИЭМ), слушая лекции автора, своими вопросами и замечаниями помогли исправить некоторые шероховатости изложения материала. При печати и редактировании рукописи, а также при анализе результатов выполнения программ автору помогали коллеги по работе. Среди них особую благодарность считаю необходимым выразить В.Г. Воросколевской, Н.Н. Ионцеву, А.В. Утолину, С. Г.Чернацкому, О. В. Шехановой.

        Глава 1. НЕФОРМАЛЬНОЕ ВВЕДЕНИЕ В СИ++

        1.1. Простые программы на языке Си++

   Начнем с объяснения структуры программ на языке Си++, мало обращая внимания на существование языка Си, точнее, не всегда явно отмечая степень преемственности.

   Пример 1. Следуя классикам [1,3], приведем программу, выводящую на экран дисплея фразу Hello, World? (Здравствуй, Вселенная!):
//HELLO.СРР - имя файла с программой.
tinclude Ciostream.h> void main()
{ cout « "\nHello, World!\n"; }
   Результат выполнения программы:
Hello, World?

   В первой строке текста программы - однострочный комментарий, начинающийся парой символов ’//’, заканчивающийся неизоб-ражаемым символом “конец строки”. Между этими разделителями может быть помещен произвольный текст. В данном примере в комментарии указано имя файла hello.срр, в котором хранится исходный текст программы.
   Во второй строке помещена команда (директива) препроцессора, обеспечивающая включение в программу средств связи со стандартными потоками ввода и вывода данных. Указанные средства находятся в файле с именем iostream.h (мнемоника: "i" (input) - ввод; ”о” (output) - вывод; stream - поток; ”h” (head) - заголовок). Стандартным потоком вывода по умолчанию считается вывод на экран дисплея. (Стандартный поток ввода обеспечивает чтение данных от клавиатуры.) Третья строка является заголовком функции с именем main. Любая программа на языке Си++ должна включать одну и только одну функцию с этим именем. Именно с нее начинается выполнение программы. Перед именем main помещено служебное слово

Язык Си++

void - спецификатор типа, указывающий, что функция main в данной программе не возвращает никакого значения. Круглые скобки после main требуются в соответствии с форматом (синтаксисом) заголовка любой функции. В них помещается список параметров. В нашем примере параметры не нужны и список пуст.
    Тело любой функции - это заключенная в фигурные скобки последовательность описаний, определений и операторов. Каждое описание, определение или оператор заканчивается символом ’’точка с запятой”. В теле функции main явных описаний и определений нет и есть только один оператор
cout « "\nHello, World!\n";

    Имя cout в соответствии с информацией, содержащейся в файле iostream.h, является именем объекта, который обеспечивает вывод информации на экран дисплея (в стандартный поток вывода). Информация для вывода передается объекту cout с помощью операции « (’’поместить в"). То, что нужно вывести, помещается справа от знака операции «. В данном случае это строка (строковая константа) "\nHello, World?\п". Строка в языке Си++ определена как заключенная в кавычки почти любая последовательность символов. Среди них могут встречаться обозначения не изображаемых на экране дисплея управляющих символов. Например, ’\п* - обозначение управляющего символа перехода к началу следующей строки экрана. Таким образом, программа выведет на новой строке экрана фразу Hello, world? и переведет курсор в начало следующей строки экрана.
    Уже сейчас следует отметить одну из принципиальных особенностей языка Си++, называемую перегрузкой или расширением действия стандартных операций. Лексема « означает операцию вставки (’’поместить в”) только в том случае, если слева от нее находится имя объекта cout. В противном случае пара символов « означает бинарную операцию сдвига влево. Итак, в единственном операторе этой программы использована операция вставки в выходной поток cout значения, помещенного справа от лексемы «.
    До выполнения программы необходимо подготовить ее текст в файле с расширением . срр; передать этот файл на компиляцию и устранить синтаксические ошибки, выявленные компилятором; безошибочно откомпилировать (получится объектный файл с расширением .obj); дополнить объектный файл нужными библиотечными функциями (компоновка) и получить исполняемый модуль программы в файле с расширением . ехе. Схема подготовки исполняемой программы приведена на рис. 1.1, где перед шагом компиляции пока
Глава 1. Неформальное введение в Си++

9

* .СРР

* .СРР

* .OBJ

* .EXE

name.срр

Рис. 1.1. Схема подготовки исполняемой программы

зан шаг препроцессорной обработки текста программы. В нашем примере препроцессор обрабатывает директиву #include <iostream.h> и подключает к исходному тексту программы средства для обмена с дисплеем (для поддержки операции «).
   Если исходный текст программы подготовлен в файле hello . срр , то препроцессор, выполнив директивы препроцессора, сформирует полный текст программы, компилятор создаст объектный файл hello . OBJ , выбрав (по умолчанию) для него указанное имя, а компоновщик (редактор связей, Linker) дополнит программу библиотечными функциями, например для работы с объектом cout, и построит мо

Язык Си++

дуль hello.exe. Запустив на выполнение файл hello.exe, получим на экране желаемую фразу Hello, World ?
    Особенности выполнения перечисленных действий зависят от конкретного компилятора языка Си++ и той операционной системы, в которой он работает. Технические подробности следует изучить по документации для конкретного программного продукта. Например, при работе с интегрированными средами фирмы Borland необходимая информация может быть получена из руководств пользователя [4, 10]. Независимо от использованного компилятора при работе в MS-DOS исполняемый модуль программы записывается в некоторый каталог (директорию). Если исполняемый модуль создан в каталоге book на диске С:, то для запуска нашей программы нужна команда MS-DOS:

>С:\BOOK\HELLO.EXE <Enter>

    Здесь и далее <Enter> обозначает нажатие клавиши Enter.

    Пример 2. Для иллюстрации некоторых особенностей определения и инициализации переменных и массивов, а также ввода и вывода данных напишем программу вычисления должностного оклада в соответствии с заданным разрядом единой тарифной сетки (ЕТС) оплаты труда для работников бюджетных отраслей в Российской Федерации. (Установлена постановлением Правительства Российской Федерации №785 от 14 октября 1992 г. Отменена 27 февраля 1995 г.)
    Исходные данные для расчета: минимальная ставка 1-го разряда (smin), массив тарифных коэффициентов, т.е. коэффициентов перерасчета а[], и номер категории (разряда) г. Массив а[] инициализируется в тексте программы, и его нельзя изменить без изменения и трансляции программы. Минимальная ставка определена в программе, но может заменяться другим значением с помощью аргумента командной строки при запуске программы на исполнение. Номер разряда всегда должен вводиться пользователем явно с клавиатуры при выполнении программы. Таким образом, программа иллюстрирует три способа задания исходных данных для расчета.

//Р1-02 . СРР - имя файла с программой                 //1
#include <iostream.h>                                  //2
tinclude <strstrea.h>                                  //3
int main(int narg, char   **arg)                       //4
{ float smin = 2250; // Ставка 1-го разряда (1992 г.)   //5
  // а [ ] ~ массив значении тарифных коэффициентов:    //6
  float а[] «  { 1.0, 1.3, 1.69, 1.91, 2.16, 2.44,     //7
        2.76,  3.12, 3.53, 3.99, 4.51, 5.10, 5.76,     //8
        6.61,  7.36, 8.17, 9.07, 10.07 };              //9

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