845
Герберт Шилдт: С++ базовый курс В этой книге описаны все основные средства языка С++ - от элементарных понятий до супервозможностей. После рассмотрения основ программирования на C++ (переменных, операторов, инструкций управления, функций, классов и объектов) читатель освоит такие более сложные средства языка, как механизм обработки исключительных ситуаций (исключений), шаблоны, пространства имен, динамическая идентификация типов, стандартная библиотека шаблонов (STL), а также познакомится с расширенным набором ключевых слов, используемых в .NET-программировании. Автор справочника - общепризнанный авторитет в области программирования на языках C и C++, Java и C# - включил в текст своей книги и советы программистам, которые позволят повысить эффективность их работы. Книга рассчитана на широкий круг читателей, желающих изучить язык программирования С++. Примеры программ работают со всеми компиляторами C++, включая Visual C++

C++: базовый курс › m › 12_103607_1_98220.pdf · 2015-12-04 · Глава 2. Обзор элементов языка C++ ... Глава 19. Динамическая

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

  • ГербертШилдт:С++базовыйкурс

    ВэтойкнигеописанывсеосновныесредстваязыкаС++-отэлементарныхпонятийдосупервозможностей. После рассмотрения основ программирования на C++ (переменных,операторов, инструкций управления,функций, классови объектов) читатель освоит такиеболее сложные средства языка, как механизм обработки исключительных ситуаций(исключений), шаблоны, пространства имен, динамическая идентификация типов,стандартная библиотека шаблонов (STL), а также познакомится с расширенным наборомключевых слов, используемых в .NET-программировании. Автор справочника -общепризнанный авторитет в области программирования на языках C и C++, Java и C# -включил в текст своей книги и советы программистам, которые позволят повыситьэффективностьихработы.

    Книга рассчитана на широкий круг читателей, желающих изучить языкпрограммированияС++.

    ПримерыпрограммработаютсовсемикомпиляторамиC++,включаяVisualC++

  • ОглавлениеГлава1.ИзисториисозданияC++Глава2.ОбзорэлементовязыкаC++Глава3.ОсновныетипыданныхГлава4.ИнструкцииуправленияГлава5.МассивыистрокиГлаваб.УказателиГлава7.Функции,частьпервая:основыГлава8.Функции,частьвторая:ссылки,перегрузкаииспользованиеаргументовпоумолчаниюГлава9.ЕщеотипахданныхиоператорахГлава10.СтруктурыиобъединенияГлава11.ВведениевклассыГлава12.ОклассахподробнееГлава13.ПерегрузкаоператоровГлава14.НаследованиеГлава15.ВиртуальныефункциииполиморфизмГлава16.ШаблоныГлава17.ОбработкаисключительныхситуацийГлава18.С++-системаввода-выводаГлава19.ДинамическаяидентификациятиповиоператорыприведениятипаГлава20.ПространстваименидругиетемыГлава21.ВведениевстандартнуюбиблиотекушаблоновГлава22.ПрепроцессорC++ПриложениеА.С-ориентнрованнаясистемаввода-выводаПриложениеБ.ИспользованиеустаревшегоС++-компилятораПриложениеВ..NET-расширениядляC++Предметныйуказатель

    ОбавтореГерберт Шилдт (Herbert Schildt) — признанный авторитет в области

    программированиянаязыкахС,C++JavaиС#,профессиональныйWindows-программист,член комитетовANSI/ISO, принимавших стандарт для языков С и C++. Продано свыше 3миллионов экземпляров его книг.Они переведенына все самые распространенные языкимира.Шилдт—автортакихбестселлеров,какПолныйсправочникпоС,ПолныйсправочникпоC++,Полный справочник поС#,Полный справочник по Java 2, и многих других книг,включая: Руководство для начинающих по C++, С#: A Beginner’s Guide и Java 2: ABeginner’sGuide.Шилдт—обладательстепенимагистравобластивычислительнойтехники(университетшт.Иллинойс).Егоконтактныйтелефон(вконсультационномотделе): (217)586-4683.

    ВведениеЦель этой книги — научить писать программы на C++ — самом мощном языке

  • программирования наших дней. Для освоения представленного здесь материала никакогопредыдущего опыта в областипрограммированияне требуется.Мыначнем с азов, знаниекоторыхпозволитчитателюосилитьсначалафундаментальныепонятияязыка,азатемиегоядро.Изучивбазовыйкурс, высправитесьисболеесложнымитемами,освоениекоторыхдаствамправосчитатьсебявполнесложившимсяпрограммистомнаC++.

    ЯзыкC++—этоключксовременномуобъектно-ориентированномупрограммированию.Он создан для разработки высокопроизводительного программного обеспечения ичрезвычайно популярен среди программистов. Сегодня быть профессиональнымпрограммистомвысокогоклассаозначаетбытькомпетентнымвC++.

    Этот язык не просто популярен. Он обеспечивает концептуальный фундамент, накоторый опираются другие языки программирования и многие современные средстваобработкиданных.НеслучайноведьпотомкамиC++сталитакиепочитаемыеязыки,какC#иJava.

    Поскольку язык C++ предназначен для профессионального программирования, дляизучения он не самый простой; тем не менее, C++— самый лучший язык для изучения.Освоив C++, вы сможете писать профессиональные высокопроизводительные программы.Кроме того, вы сможете легко изучить такие языки программирования, как C# и Java,посколькуонииспользуюттотжебазовыйсинтаксиситежепринципыразработки.

    ЧтоновоговтретьемизданииЗавремя,прошедшеесмоментавыходапредыдущегоизданияэтойкниги,языкC++не

    претерпел никаких изменений. Однако изменилась вычислительная среда. Например,доминирующее положение вWeb-программировании занял язык Java, появилась система.NETFrameworkиязыкС#.НомощьC++запрошедшиенескольколетничутьнеубавилась.C++был,естьиещедолгобудетосновнымязыком"классных"программистов.

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

    Кроме того, добавлено два приложения. В одном описаны определенные компаниейMicrosoft ключевые слова, которые используются для создания управляемого кода,предназначенногодлясреды.NETFramework.Вдругомразъясняется,какадаптироватькод,приведенныйвэтойкниге,кболеестарыминестандартнымкомпиляторам.

    Наконец, все примеры программ были протестированы с использованием такихкомпиляторов,какVisualStudio.Net(Microsoft)иC++Builder(Borland).

    ОверсииC++Материал этой книги описывает Standard C++. Эта версия C++ определена

    Американскимнациональныминститутом стандартов (AmericanNational Standards Institute— ANSI) и Международной организацией по стандартизации (International StandardsOrganization— ISO) в качестве стандарта для C++, который поддерживается практическивсемиизвестнымикомпиляторами.Поэтому,используяэтукнигу,выможетебытьуверенывтом,чтоосвоенноевамисегоднянепременнобудетпримененозавтра.

    КакработатьсэтойкнигойИзучайте любой язык программирования (в том числе и C++), программируя. Это—

  • лучший способ. Поэтому, прочитав очередной раздел, закрепите материал на практике.Преждечемпереходитькследующемуразделу,убедитесьвтом,чтовыпонимаете,почемупримеры программ делают то, что они делают. Полезно также экспериментировать спрограммами, изменяя одну или две строки и анализируя влияние этих изменений нарезультаты. Чем больше вы будете программировать, тем выше будет ваш уровень какпрограммиста.

    ЕсливыработаетеподуправлениемWindowsЕсли на вашем компьютере установлена система Windows, и ваша цель — создание

    Windows-ориентированных программ, вы сделали правильный выбор, решив изучать C++,посколькуC++—этороднойязыкдляWindows.ОднакониводномизпримеровэтойкнигинеиспользуетсяWindows-интерфейсGUI(graphicaluserinterface—графическийинтерфейспользователя).Всеприведенныездесьпримерыявляютсяконсольными,т.е.приложениями,запускаемымиизкоманднойстроки(посколькунеимеютграфическогоинтерфейса).Делов том, чтоGUI-программы отличаются высокой сложностью и большим размером.Крометого, они используют множество методов, которые напрямую не связаны с языком C++.Поэтому они не совсем подходят для обучения языку программирования. Однако это немешаетиспользоватьWindows-ориентированныйкомпилятордлякомпиляциипрограммизэтой книги, поскольку он автоматически создаст консольный сеанс, позволяющийвыполнитьпрограмму.

    Освоив C++, вы сможете применить свои знания к Windows-программированию.Windows-программирование на основе C++ позволяет использовать библиотеки классов,напримерMFCили.NETFramework,которыезначительноупрощаютразработкуWindows-программ.

    Программныйкод—изWeb-пространстваПомните, что исходный код всех программ, приведенных в этой книге, можно

    загрузить сWeb-сайта с адресом: http://www.osborne.com. Загрузка кода избавит вас отнеобходимостивводитьтекстпрограммвручную.

    ЧтоещепочитатьКнига C++: базовый курс — это ваш "ключ" к серии книг по программированию,

    написанныхГербертомШилдтом.Нижеперечисленытеизних,которыемогутпредставлятьдлявасинтерес.

    Те,ктожелаетподробнееизучитьязыкC++,могутобратитьсякследующимкнигам.■ПолныйсправочникпоC++■РуководстводляначинающихпоC++■ОсвойсамостоятельноC++за21день■STLProgrammingfromtheGroundUp■СправочникпрограммистапoC/C++Тем,когоинтересуетпрограммированиенаязыкеJava,мырекомендуемтакиеиздания.■Java2:ABeginner’sGuide■ПолныйсправочникпоJava2■Java2:Programmer’sReferenceЕсливыжелаетенаучитьсяпрограммироватьнаС#,обратитеськследующимкнигам.

  • ■С#:ABeginner’sGuide■ПолныйсправочникпоC#Тем, кто интересуется Windows-программированием, мы можем предложить такие

    книгиШилдта.■Windows98ProgrammingfromtheGroundUp■Windows2000ProgrammingfromtheGroundUp■MFCProgrammingfromtheGroundUp■TheWindowsAnnotatedArchivesЕсливыхотитепоближепознакомитьсясязыкомС,которыйявляетсяфундаментомвсех

    современныхязыковпрограммирования,обратитеськследующимкнигам.■ПолныйсправочникпоС■ОсвойсамостоятельноСза21день

    Есливамнужнычеткиеответы,обращайтеськГербертуШилдту,общепризнанномуавторитетувобластипрограммирования.

    Ждемвашихотзывов!Вы,уважаемыйчитатель,иестьглавныйкритикикомментаторэтойкниги.Мыценим

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

    Мыждемвашихкомментариевинадеемсянаних.ВыможетеприслатьнамбумажноеилиэлектронноеписьмолибопростопосетитьнашWeb-cepвepиоставитьсвоизамечаниятам.Однимсловом,любым,удобнымдлявасспособомдайтенамзнать,нравитсяилинетвам эта книга, а также выскажите свое мнение о том, как сделать наши книги болееинтереснымидлявас.

    Посылая письмо или сообщение, не забудьте указать название книги и ее авторов, атакжевашобратныйадрес.Мывнимательноознакомимсясвашиммнениемиобязательноучтемегоприотбореиподготовкекизданиюпоследующихкниг.Нашикоординаты:

    E-mail:[email protected]

    WWW:http://www.williamspublishing.comАдресадляписем:изРоссии:115419,Москва,а/я783изУкраины:03150,Киев,а/я152

    отредактораFB2Таккакэтаэлектроннаякнигабудетотображатьсянаустройствахсразнымиразмерами

    экрана, то располежение текста книги будет разным. Так же в книге используетсяформатирование кода (сдвиг вправо пробелами), а в некоторых читалках пять пробеловотображаетсякакодин (AlReader2).Поэтомуя сделалпробел(сдвиг) в видеюникода есливашеустройствои/иличиталкаподдерживаютюникод,тоувасбудетотображатьсяпробелвкоде, если неподдерживают то будет отображаться квадрат (вместо него в программекомпиляторепишитепарупробелов,илиодинTAB)

    Пример:   

  • сдвига(тамгдеониотображаются)пишитепарупробелов(илиигнорируйтеих)Так же обращайте внимание на построчный коментрарий: // на маленьком экране он

    можетразбитьсяна2строки!

    кодпрограммы//коментарийкоментарийможетразбитьсянадвестроки

    1-ястрока-ком

    2-ястрока-ентарий

    вэтомслучаекомпиляторбудетругатьсянакомандуентарий вкомпилятореонбудетотображатьсядругимцветомнежели

    //ком

    витогепрограмманебудетзапускаться.Лечитсяэтоперемещениементарийнастроку//ком

    ->1-ястрока//коментарий

    Настройкаотображениякода:(длятогочтобыбылоудобеечитатькодпрограмм)AlReader2:меню=> настройки=> стили текста=> код=> настройте: выравнивание=К левому краю,

    цвет=(выберите цвет), отступ слева=нет отступа, отступ справа=нет отступа, отступначалаабзаца=(убратьгалочку),остальныенастройкинавашвыбор.Вдругихпрограммахнастройкианалогичны...

    Так как каждый компилятор и среда разработки "по свойму нарушает стандарт C++"(что-то убирает или добавляет), а так же из за развития C++ с момента его создания,некоторые программы этой книги нужно писать по другому.По этой причине я привожусписоксайтовнакоторыхвысможетенайтиответынаинтересующиевасвопросы:

    http://codenet.ru/http://hashcode.ruhttp://rsdn.ru/http://ci-plus-plus.blogspot.com/http://programmersclub.ru/http://cyberforum.ru/

  • Глава1:ИзисториисозданияC++ЯзыкC++—единственный(изсамыхзначительных)языкпрограммирования,который

    можетосвоитьлюбойпрограммист.Этоможетпоказатьсяоченьсерьезнымзаявлением,нооно—непреувеличение.C++—этоцентрпритяжения, вокруг которого "вращается" всёсовременное программирование. Его синтаксис и принципы разработки определяют сутьобъектно-ориентированного программирования. Более того, C++ проложил "лыжню" дляразработкиязыковбудущего.Например,какJava,такиC#—прямыепотомкиязыкаC++.C++ также можно назвать универсальным языком программирования, поскольку онпозволяет программистам обмениваться идеями. Сегодня быть профессиональнымпрограммистом высокого класса означает быть компетентным в C++. C++— это ключ ксовременномупрограммированию.

    ПриступаякизучениюC++,важнознать,каконвписываетсявисторическийконтекстязыков программирования. Понимая, что привело к его созданию, какие принципыразработки он представляет и что он унаследовал от своих предшественников, вам будетлегче оценить суть новаторства и уникальность средств C++. Именно поэтому в даннойглаве вам предлагается сделать краткий экскурс в историю создания языкапрограммированияC++, заглянутьв егоистоки,проанализировать еговзаимоотношенияснепосредственным предшественником (С), рассмотреть его возможности (областиприменения) и принципы программирования, которые он поддерживает. Здесь также выузнаете,какоеместозанимаетC++средидругихязыковпрограммирования.

    ИстокиC++ИсториясозданияC++начинаетсясязыкаС.Инемудрено:C++построеннафундаменте

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

    СозданиеязыкаСПоявлениеязыкаСпотряслокомпьютерныймир.Еговлияниенельзябылопереоценить,

    поскольку он коренным образом изменил подход к программированию и его восприятие.Язык С стал считаться первым современным "языком программиста", поскольку до егоизобретения компьютерные языки в основном разрабатывались либо как учебныеупражнения, либо как результат деятельностибюрократических структур.С языкомСвсеобстоялоиначе.Онбылзадуманиразработанреальными,практикующимипрограммистамии отражал их подход к программированию. Его средства были многократно обдуманы,отточены и протестированы людьми, которые действительно работали с этим языком. Врезультате этого процесса появился язык, который понравился многим программистам-практикам.

    Язык С быстро завоевал умы и сердца многочисленных приверженцев, у которых

  • возникло к новому языку почти религиозное чувство, что способствовало быстрому иширокомуегораспространениювсообществепрограммистов.Корочеговоря,С—этоязык,который разработан программистами для программистов. Именно это и обусловило егобешеныйуспех.

    Язык С изобрел Дэнис Ритчи (Dennis Ritchie) для компьютера PDP-11 (разработкакомпании DEC — Digital Equipment Corporation), который работал под управлениемоперационнойсистемы(ОС)UNIX.ЯзыкС—эторезультатпроцессаразработки,которыйсначала был связан с другим языком — BCPL, созданным Мартином Ричардсом (MartinRichards).ЯзыкBCPLиндуцировалпоявлениеязыка,получившегоназваниеВ(егоавтор—КенТомпсон (KenThompson)), которыйв своюочередьпривелкразработкеязыкаС.Этослучилосьвначале70-хгодов.

    На протяжении многих лет стандартом для языка С де-факто служил язык,поддерживаемый ОС UNIX и описанный в книге Брайана Кернигана (Brian Kernighan) иДэниса Ритчи The С Programming Language (Prentice-Hall, 1978). Однако формальноеотсутствиестандартасталопричинойрасхождениймеждуразличнымиреализациямиязыкаС. Чтобы изменить ситуацию, в начале лета 1983 г. был учрежден комитет по созданиюANSI-стандарта, призванного — раз и навсегда — определить язык С. Конечная версияэтого стандарта была принята в декабре 1989, а его первая копия стала доступной дляжелающихвначале1900.ЭтаверсияязыкаСполучиланазваниеС89,иименноонаявиласьфундаментом,накоторомбылпостроенязыкC++.

    На заметку:Стандарт С был обновлен в 1999 году, и эта версия языка С получиланазвание С99. Новый стандарт содержит ряд новых средств, причем некоторые из нихпозаимствованы из C++, тем не менее они полностью совместимы с оригинальнымстандартом С89. Насколько мне известно, на данный момент ни один из широкодоступных компиляторов не поддерживает версию С99, и по-прежнему версия С89определяетто,чтообычноподразумеваетсяподязыкомС.Болеетого,именностандартС89послужилосновойдлясозданияязыкаC++.Вполневозможно,чтобудущийстандартязыкаC++будетвключатьсредства,добавленныеверсиейС99,нопокаонинеявляютсячастьюC++.

    ЯзыкСчастоназываюткомпьютернымязыком"среднегоуровня".ПрименительнокСэтоопределениенеимеетнегативногооттенка,посколькуоноотнюдьнеозначает,чтоязыкСменеемощныйиразвитый(посравнениюсязыками"высокогоуровня")илиегосложноиспользовать (подобно ассемблеру). (Для языка ассемблера характерно символическоепредставление реального машинного кода, который может выполнять компьютер.) Сназываютязыкомсреднегоуровня,посколькуонсочетаетэлементыязыковвысокогоуровня(напримерPascal,Modula-2илиVisualBasic)сфункциональностьюассемблера.

    Сточкизрениятеориивязыквысокогоуровнязаложеностремлениедатьпрограммистувсе,чтоонможетзахотеть,ввидевстроенныхсредств.Языкнизкогоуровнянеобеспечиваетпрограммиста ничем, кроме доступа к реальным машинным командам. Язык среднегоуровня предоставляет программистам некоторый (небольшой) набор инструментов,позволяяим самимразрабатывать конструкцииболее высокого уровня.Другими словами,языксреднегоуровняпредлагаетпрограммистувстроеннуюмощьвсочетаниисгибкостью.

    Будучи языком среднего уровня, С позволяет манипулировать битами, байтами иадресами,т.е.базовымиэлементами,скоторымиработаеткомпьютер.Такимобразом,вС

  • не предусмотрена попытка отделить аппаратные средства компьютера от программных.Например, размер целочисленного значения в С напрямую связан с размером словацентрального процессора (ЦП). В большинстве языков высокого уровня существуютвстроенныеинструкции,предназначенныедлячтенияизаписидисковыхфайлов.ВязыкеСвсе эти процедуры выполняются посредством вызова библиотечных функций, а не спомощью ключевых слов, определенных в самом языке. Такой подход повышает гибкостьязыкаС.

    Язык С позволяет программисту (правильнее сказать, стимулирует его) определятьподпрограммыдлявыполненияоперацийвысокогоуровня.Этиподпрограммыназываютсяфункциями. Функции имеют очень большое значение для языка С. Их можно назватьстроительными блоками С. Программист может без особых усилий создать библиотекуфункций, предназначенную для выполнения различных задач, которые используются егопрограммой. В этом смысле программист может персонализировать С в соответствии сосвоимипотребностями.

    НеобходимоупомянутьещеободномаспектеязыкаС,которыйоченьважендляC++:С—структурированныйязык.Самойхарактернойособенностьюструктурированногоязыкаявляетсяиспользованиеблоков.Блок—этонаборинструкций,которыелогическисвязанымеждусобой.Например,представьтесебеинструкциюIF,котораяприуспешнойпроверкесвоеговыражениядолжнавыполнитьпятьотдельныхинструкций.Аеслиэтиинструкции(специальнымобразом)сгруппироватьиобращатьсякнимкаккединомуцелому,тотакаягруппаобразуетблок.

    Структурированный язык поддерживает концепцию подпрограмм и локальныхпеременных.Локальная переменная— это обычная переменная, которая известна толькоподпрограмме, в которой она определена. Структурированный язык также поддерживаетряд таких циклических конструкций, как while, do-while и for. Однако использованиеинструкцииgotoлибозапрещается,либонерекомендуется,иненесетвсебетойсмысловойнагрузкидляпередачиуправления,какаяприсущаейвтакихязыкахпрограммирования,какBASIC или FORTRAN. Структурированный язык позволяет структурировать текстпрограммы,т.е.делатьотступыпринаписанииинструкций,инетребуетстрогойпривязкикполям,какэтореализовановраннихверсияхязыкаFORTRAN.

    Наконец(иэто,возможно,самоеважное),языкСненесетответственностизадействияпрограммиста.ОсновнойпринципСсостоитвтом,чтобыпозволитьпрограммистуделатьвсе, что он хочет, но за последствия, т.е. за все, что делает программа (пусть даже оченьнеобычное,что-тоизрядавонилидажеподозрительное),отвечаетнеязык,апрограммист.ЯзыкСпредоставляетпрограммиступрактическиполнуювластьнадкомпьютером,ноэтавластьложитсянаегоплечитяжкимбременемответственности.

    ПредпосылкивозникновенияязыкаC++Приведенная выше характеристика языка С может вызвать справедливое недоумение:

    зачемжетогда,мол,былизобретенязыкC++?ЕслиС—такойхорошийиполезныйязык,то почему возникла необходимость в чем-то еще?Оказывается, все дело в сложности.Напротяжении всей истории программирования усложнение программ заставлялопрограммистовискатьпути,которыебыпозволилисправитьсясосложностью.C++можносчитатьоднимизспособовеепреодоления.Попробуемлучшераскрытьэтувзаимосвязь.

    Отношениекпрограммированиюрезкоизменилосьсмоментаизобретениякомпьютера.

  • Основная причина — стремление "укротить" всевозрастающую сложность программ.Например, программирование для первых вычислительных машин заключалось впереключении тумблеров на их передней панели таким образом, чтобы их положениесоответствовалодвоичнымкодаммашинныхкоманд.Покадлиныпрограммнепревышалинескольких сотен команд, такойметод еще имел право на существование.Но по мере ихдальнейшегоростабылизобретенязыкассемблер,чтобыпрограммистымоглииспользоватьсимволическоепредставлениемашинныхкоманд.Посколькупрограммыпродолжалирастив размерах, желание справиться с более высоким уровнем сложности вызвало появлениеязыков высокого уровня, разработка которых дала программистам больше инструментов(новыхиразных).

    Первым широко распространенным языком программирования был, конечно же,FORTRAN.Несмотрянаточтоэтобылоченьзначительныйшагнапутипрогрессавобластипрограммирования, FORTRAN все же трудно назвать языком, который способствовалнаписанию ясных и простых для понимания программ. Шестидесятые годы двадцатогостолетия считаются периодом появления структурированного программирования. ИменнотакойметодпрограммированияибылреализованвязыкеС.Спомощьюструктурированныхязыковпрограммированияможнобылописатьпрограммысреднейсложности,причембезособых героических усилий со стороны программиста. Но если программный проектдостигалопределенногоразмера,тодажесиспользованиемупомянутыхструктурированныхметодов его сложность резко возрастала и оказывалась непреодолимой для возможностейпрограммиста. Когда (к концу 70-х) к "критической" точке подошло довольно многопроектов, стали рождаться новые технологии программирования. Одна из них получиланазваниеобъектно-ориентированногопрограммирования (ООП). ВооружившисьметодамиООП,программистмогсправлятьсяспрограммамигораздобольшегоразмера,чемпрежде.НоязыкСнеподдерживалметодовООП.Стремлениеполучитьобъектно-ориентированнуюверсиюязыкаСвконцеконцовипривелоксозданиюC++.

    Несмотря на то что язык С был одним из самых любимых и распространенныхпрофессиональных языков программирования, настало время, когда его возможности понаписаниюсложныхпрограммдостиглисвоегопредела.Желаниепреодолетьэтотбарьерипомочь программисту легко справляться с еще более сложными программами— вот чтосталоосновнойпричинойсозданияC++.

    РождениеC++Итак, C++ появился как ответ на необходимость преодолеть еще большую сложность

    программ.ОнбылсозданБьерномСтрауструпом(BjarneStroustrup)в1979годувкомпанииBellLaboratories(г.Муррей-Хилл,шт.Нью-Джерси).Сначалановыйязыкполучилимя"Ссклассами"(СwithClasses),нов1983годуонсталназыватьсяC++.

    C++ полностью включает язык С. Как упоминалось выше, С — это фундамент, накоторомбылпостроенC++.ЯзыкC++содержитвсесредстваиатрибутыСиобладаетвсемиего достоинствами. Для него также остается в силе принцип С, согласно которомупрограммист, а не язык, несет ответственность за результаты работы своей программы.Именно этот момент позволяет понять, что изобретение C++ не было попыткой создатьновыйязыкпрограммирования.Этобылоскорееусовершенствованиеужесуществующего(иприэтомвесьмауспешного)языка.

    Большинствоновшеств,которымиСтрауструпобогатилязыкС,былопредназначенодля

  • поддержки объектно-ориентированного программирования. По сути, C++ стал объектно-ориентированнойверсиейязыкаС.ВзявязыкСзаоснову,Страуструпподготовилплавныйпереход к ООП. Теперь, вместо того, чтобы изучать совершенно новый язык, С-программистудостаточнобылоосвоитьтолькорядновыхсредств,ионмогпожинатьплодыиспользованияобъектно-ориентированнойтехнологиипрограммирования.

    Однако в основу C++ лег не только язык С. Страуструп утверждает, что некоторыеобъектно-ориентированные средства были инспирированы другим объектно-ориентированным языком, а именно Simula67. Таким образом, C++ представляет собойсимбиоздвухмощныхметодологийпрограммирования.

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

    Несмотря на то что C++ изначально был нацелен на поддержку очень большихпрограмм, этим, конечно же, его использование не ограничивалось. И в самом деле,объектно-ориентированные средства C++ можно эффективно применять практически клюбой задаче программирования. Неудивительно, что C++ используется для созданиякомпиляторов, редакторов, компьютерных игр и программ сетевого обслуживания.Поскольку C++ обладает эффективностью языка С, то программное обеспечение многихвысокоэффективныхсистемпостроеносиспользованиемC++.Крометого,C++—этоязык,которыйчащевсеговыбираетсядляWindows-программирования.

    Важно такжепомнить следующее.ПосколькуC++является супермножествомязыкаС,то,научившисьпрограммироватьнаC++,высможететакжепрограммироватьинаС!Такимобразом, приложив усилия к изучению только одного языка программирования, вы вдействительностиизучитесразудва.

    ЭволюцияC++Смомента изобретенияC++ претерпел три крупных переработки, причем каждый раз

    языккакдополнялсяновымисредствами,такивчем-тоизменялся.Первойревизиионбылподвергнут в 1985 году, а второй — в 1990. Третья ревизия имела место в процессестандартизации, который активизировался в начале 1990-х. Специально для этого былсформированобъединенныйANSI/ISO-комитет(ябылегочленом),который25января1994годапринялпервыйпроектпредложенногонарассмотрениестандарта.Вэтотпроектбыливключены все средства, впервые определенные Страуструпом, и добавлены новые. Но вцеломонотражалсостояниеC++натотмоментвремени.

    Вскоре после завершения работы над первым проектом стандарта C++ произошлособытие, которое заставило значительно расширить существующий стандарт. Речь идет осозданииАлександромСтепановым стандартной библиотекишаблонов (Standard TemplateLibrary— STL). Как вы узнаете позже, STL— это набор обобщенных функций, которыеможно использовать для обработки данных. Он довольно большой по размеру. КомитетANSI/ISO проголосовал за включение STL в спецификацию C++. Добавление STLрасширило сферу рассмотрения средств C++ далеко за пределы исходного определенияязыка.

  • Однако включение STL, помимо прочего, замедлило процесс стандартизации C++,причемдовольносущественно.ПомимоSTL, в самязыкбылодобавленонескольконовыхсредствивнесеномножествомелкихизменений.ПоэтомуверсияC++послерассмотрениякомитетомпостандартизациисталанамногобольшеисложнеепосравнениюсисходнымвариантомСтрауструпа. Конечный результат работы комитета датируется 14 ноября 1997года, а реально ANSI/ISO-стандарт языка C++ увидел свет в 1998 году. Именно этаспецификацияC++обычноназываетсяStandardC++.Иименноонаописана в этойкниге.ЭтаверсияC++поддерживаетсявсемиосновнымиС++-компиляторами,включаяVisualC++(Microsoft) и C++ Builder (Borland). Поэтому код программ, приведенных в этой книге,полностьюприменимковсемсовременнымС++-средам.

    Чтотакоеобъектно-ориентированноепрограммированиеПоскольку именно принципы объектно-ориентированного программирования были

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

    Все языки объектно-ориентированного программирования характеризуются тремяобщимипризнаками:инкапсуляцией,полиморфизмоминаследованием.Рассмотримкраткокаждыйизних(подробноонибудутописанынижевэтойкниге).

    ИнкапсуляцияНи для кого не секрет, что все программы, как правило, состоят из двух основных

    элементов: инструкций (кода) и данных.Код— это часть программы, которая выполняетдействия,аданныепредставляютсобойинформацию,накоторуюнаправленыэтидействия.Инкапсуляция—этотакоймеханизмпрограммирования,которыйсвязываетвоединокодиданные, которые он обрабатывает, чтобы обезопасить их как от внешнего вмешательства,такиотнеправильногоиспользования.

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

    Внутри объекта, код, данные или обе эти составляющие могут быть закрытыми в"рамках" этогообъектаилиоткрытыми.Закрытый код (илиданные)известенидоступентолькодругимчастямтогожеобъекта.Другимисловами,кзакрытомукодуилиданнымнеможет получить доступ та часть программы, которая существует вне этого объекта.Открытый код (или данные) доступен любым другим частям программы, даже если ониопределены в других объектах. Обычно открытые части объекта используются дляпредоставленияуправляемогоинтерфейсасзакрытымиэлементамиобъекта.

  • ПолиморфизмПолиморфизм (от греческого слова polymorphism, означающего "много форм") — это

    свойство, позволяющее использовать один интерфейс для целого класса действий.Конкретное действие определяется характерными признаками ситуации. В качествепростого примера полиморфизма можно привести руль автомобиля. Для руля (т.е.интерфейса) безразлично, какой тип рулевого механизма используется в автомобиле.Другим словами, руль работает одинаково, независимо от того, оснащен ли автомобильрулевым управлением прямого действия (без усилителя), рулевым управлением сусилителемилимеханизмомреечнойпередачи.Есливызнаете,какобращатьсясрулем,высможете вести автомобиль любого типа. Тот же принцип можно применить кпрограммированию. Рассмотрим, например, стек, или список, добавление и удалениеэлементов к которому осуществляется по принципу "последним прибыл — первымобслужен".Увасможетбытьпрограмма,вкоторойиспользуютсятриразличныхтипастека.Одинстекпредназначендляцелочисленныхзначений,второй—длязначенийсплавающейточкой и третий — для символов. Алгоритм реализации всех стеков — один и тот же,несмотря на то, что в них хранятся данные различных типов. В необъектно-ориентированном языке программисту пришлось бы создать три различных набораподпрограмм обслуживания стека, причем подпрограммы должны были бы иметьразличныеимена,акаждыйнабор—собственныйинтерфейс.НоблагодаряполиморфизмувC++можносоздатьодинобщийнаборподпрограмм(одининтерфейс),которыйподходитдлявсех трехконкретныхситуаций.Такимобразом, зная, какиспользоватьодин стек, выможетеиспользоватьвсеостальные.

    Вболееобщемвидеконцепцияполиморфизмавыражаетсяфразой"одининтерфейс—много методов". Это означает, что для группы связанных действий можно использоватьодинобобщенныйинтерфейс.Полиморфизмпозволяетпонизитьуровеньсложностизасчетвозможностипримененияодногоитогожеинтерфейсадлязаданияцелогоклассадействий.Выборжеконкретногодействия (т.е. функции) применительно к той или иной ситуацииложится "на плечи" компилятора. Вам, как программисту, не нужно делать этот выборвручную.Вашазадача—использоватьобщийинтерфейс.

    Первыеязыкиобъектно-ориентированногопрограммированиябылиреализованыввидеинтерпретаторов, поэтому полиморфизм поддерживался во время выполнения программ.ОднакоC++—этотранслируемыйязык(вотличиеотинтерпретируемого).Следовательно,в C++ полиморфизм поддерживается на уровне как компиляции программы, так и еевыполнения.

    НаследованиеНаследование — это процесс, благодаря которому один объект может приобретать

    свойства другого. Благодаря наследованию поддерживается концепция иерархическойклассификации. В виде управляемой иерархической (нисходящей) классификацииорганизуетсябольшинствообластейзнаний.Например,яблокиКрасныйДелишесявляютсячастьюклассификациияблоки, которая в своюочередь являетсячастьюклассафрукты, атот — частью еще большего класса пища. Таким образом, класс пища обладаетопределенными качествами (съедобность, питательность и пр.), которые применимы и кподклассу фрукты. Помимо этих качеств, класс фрукты имеет специфическиехарактеристики (сочность, сладость и пр.), которые отличают их от других пищевых

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

    Если не использовать иерархическое представление признаков, для каждого объектапришлось бы в явной форме определить все присущие ему характеристики.Но благодарянаследованию объекту нужно доопределить только те качества, которые делают егоуникальным внутри его класса, поскольку он (объект) наследует общие атрибуты своегородителя. Следовательно, именно механизм наследования позволяет одному объектупредставлятьконкретныйэкземплярболееобщегокласса.

    C++иреализацияООПВ этой книге показано, что многие средства C++ предназначены для поддержки

    инкапсуляции, полиморфизма и наследования. Однако следует помнить, что язык C++можно использовать для написания программ любого типа. Тот факт, что C++поддерживает объектно-ориентированное программирование, не означает, что С++-программистможетписатьтолькообъектно-ориентированныепрограммы.ОднимизсамыхважныхдостоинствязыкаC++(какиегопредшественника,языкаС)являетсягибкость.

    СвязьC++сязыкамиJavaиC#Вероятно,многиечитателизнаютосуществованиитакихязыковпрограммирования,как

    JavaиС#.ЯзыкJavaразработанвкомпанииSunMicrosystems,aC#—вкомпанииMicrosoft.Посколькуиногда возникаетпутаницаотносительно того, какое отношение этидва языкаимеюткC++,попробуемвнестиясностьвэтотвопрос.

    C++ является родительским языком для Java и С#. И хотя разработчики Java и C#добавили к первоисточнику, удалили из него илимодифицировали различные средства, вцелом синтаксис этих трех языковпрактическиидентичен.Более того, объектнаямодель,используемаяC++,подобнаобъектныммоделямязыков JavaиС#.Наконец, очень сходнообщее впечатление и ощущение от использования всех этих языков.Это значит, что, знаяC++,выможетелегкоизучитьJavaилиС#.Схожестьсинтаксисовиобъектныхмоделей—однаизпричинбыстрогоосвоения(иодобрения)этихдвухязыковмногимиопытнымиС++-программистами. Обратная ситуация также имеет место: если вы знаете Java или С#,изучениеC++недоставитвамхлопот.

    ОсновноеразличиемеждуC++,JavaиC#заключаетсявтипевычислительнойсреды,длякоторой разрабатывался каждый из этих языков. C++ создавался с целью написаниявысокоэффективных программ, предназначенных для выполнения под управлениемопределеннойоперационнойсистемыиврасчетенаЦПконкретноготипа.Например,есливы хотите написать высокоэффективную программу для выполнения на процессоре IntelPentium под управлением операционной системыWindows, лучше всего использовать дляэтогоязыкC++.

    Языки Java и C# разработаны в ответ на уникальные потребности сильнораспределеннойсетевойсреды,котораяможетслужитьтипичнымпримеромсовременныхвычислительных сред. Java позволяет создавать межплатформенный (совместимый снесколькими операционными средами) переносимый программный код для Internet.Используя Java, можно написать программу, которая будет выполняться в различных

  • вычислительныхсредах,т.е.вширокомдиапазонеоперационныхсистемитиповЦП.Такимобразом, Java-пpoгpaммa может свободно "бороздить просторами" Internet. C# разработандля среды .NET Framework (Microsoft), которая поддерживает многоязычноепрограммирование (mixed-language programming) и компонентно-ориентированный код,выполняемыйвсетевойсреде.

    Несмотря на то что Java и C# позволяют создавать переносимый программный код,который работает в сильно распределенной среде, цена этой переносимости —эффективность. Java-пpoгpaммы выполняются медленнее, чем С++-программы. То жесправедливоидляС#.Поэтому,есливыхотитесоздаватьвысокоэффективныеприложения,используйтеC++.Еслижевамнужныпереносимыепрограммы,используйтеJavaилиС#.

    И последнее. Языки C++, Java и C# предназначены для решения различных классовзадач. Поэтому вопрос "Какой язык лучше?" поставлен некорректно. Уместнее задатьвопроспо-другому:"Какойязыкнаиболееподходитдлярешенияданнойзадачи?".

  • Глава2:ОбзорэлементовязыкаC++Самым трудным в изучении языка программирования, безусловно, является то, что ни

    один его элемент не существует изолированно от других. Компоненты языка работаютвместе, можно сказать, в дружном "коллективе". Такая тесная взаимосвязь усложняетрассмотрение одного аспектаC++ без рассмотрения других. Зачастую обсуждение одногосредства предусматривает предварительное знакомство с другим. Для преодоленияподобныхтрудностейвэтойглавеприводитсякраткоеописаниетакихэлементовC++,какобщийформатС++-программы, основные инструкции управления и операторы.При этоммынебудемуглублятьсявдетали, а сосредоточимсянаобщихконцепцияхсозданияС++-программы. Большинство затронутых здесь тем более подробно рассматриваются востальныхглавахкниги.

    Поскольку изучать язык программирования лучше всего путем реальногопрограммирования,мырекомендуемчитателюсобственноручновыполнятьприведенныевэтойкнигепримерынасвоемкомпьютере.

    ПерваяС++-программа

    Прежде чем зарываться в теорию, рассмотрим простую С++-программу. Начнем свыводатекста,азатемперейдемкеекомпиляцииивыполнению.

    /*Программа№1-ПерваяС++-программа.

    Введитеэтупрограмму,затемскомпилируйтеееивыполните.

    */

    #include

    usingnamespacestd;

    //main()-началовыполненияпрограммы.

    intmain()

    {

     cout

  • Итак,выдолжнывыполнитьследующиедействия.1.Ввеститекстпрограммы.2.Скомпилироватьее.3.Выполнить.Исходныйкод— этотекстоваяформа программы.Объектныйкод— этоформа

    программы,которуюможетвыполнитькомпьютер.Прежде чем приступать к выполнению этих действии, необходимо определить два

    термина:исходныйкодиобъектныйкод.Исходныйкод—этоверсияпрограммы,которуюможет читать человек. Приведенный выше листинг — это пример исходного кодаВыполняемаяверсияпрограммыназываетсяобъектным,иливыполняемым,кодом.

    ВводтекстапрограммыПрограммы, представленные в этой книге, можно загрузить с Web-сайта компании

    Osborne с адресом: www.osborne.com. При желании вы можете ввести текст программвручную. В этом случае необходимо использовать какой-нибудь текстовый редактор(напримерWordPad),анетекстовойпроцессор(wordprocessor).Деловтом,чтопривводетекста программ должны быть созданы исключительно текстовые файлы, а не файлы, вкоторых вместе с текстом сохраняется информация о его форматировании. Помните, чтоинформацияоформатированиипомешаетработеС++-компилятора.

    Имяфайла,которыйбудетсодержатьисходныйкодпрограммы,формальноможетбытьлюбым. Но С++-программы обычно хранятся в файлах с расширением .срр . Поэтомуназывайте своиС++-программылюбымиименами,новкачестверасширенияиспользуйте.срр.Например,назовитенашупервуюпрограммуMyProg.cpp(этоимябудетупотреблятьсявдальнейшихинструкциях),адлядругихпрограмм(еслинебудетспециальныхуказаний)выбирайтеименапосвоемуусмотрению.

    КомпилированиепрограммыСпособ компиляции программыMyProg.срр зависит от используемого компилятора и

    выбранныхопций.Болеетого,многиекомпиляторы,напримерVisualC++(Microsoft)иC++Builder(Borland),предоставляютдваразличныхспособакомпиляциипрограмм:спомощьюкомпилятора командной строки и интегрированной среды разработки (IntegratedDevelopmentEnvironment—IDE).ПоэтомудлякомпилированияС++-программневозможнодатьуниверсальныеинструкции,которыеподойдутдлявсехкомпиляторов.Этозначит,чтовы должны следовать инструкциям, приведенным в сопроводительной документации,прилагаемойквашемукомпилятору.

    Но,какупоминалосьвыше,самымипопулярнымикомпиляторамиявляютсяVisualC++иC++Builder, поэтомудляудобствачитателей, которыеихиспользуют,мыприведем здесьинструкциипокомпиляциипрограмм,соответствующиеэтимкомпиляторам.Прощевсеговобоих случаях компилировать и выполнять программы, приведенные в этой книге, сиспользованиемкомпиляторовкоманднойстроки.Такмыипоступим.

    Чтобы скомпилировать программу МуРrog.срр, используя Visual C++, введитеследующуюкоманднуюстроку:

    C:\...>cl-GXMyProg.cppОпция -GX предназначена для повышения качества компиляции. Чтобы использовать

    компилятор командной строки Visual C++, необходимо выполнить пакетный файл

  • VCVARS32.bat,которыйвходитвсоставVisualC++.Чтобы скомпилировать программуMyProg.срр, используя C++ Builder, введите такую

    команднуюстроку:

    С:\...>bcc32MyProg.сррВ результате работы С++-компилятора получается выполняемый объектный код. Для

    Windows-среды выполняемый файл будет иметь то же имя, что и исходный, но другоерасширение,аименнорасширение .ехе.Итак,выполняемаяверсияпрограммыMyProg.сррбудетхранитьсявфайлеMyProg.ехе.

    На заметку. Если при попытке скомпилировать первую программу вы получилисообщение об ошибке, но уверены, что ввели ее текст корректно, то, возможно, выиспользуете старую версию С++-компилятора, который был создан до принятия С++-стандарта ANSI/ISO. В этом случае обратитесь к приложению Б за инструкциями поиспользованиюстарыхкомпиляторов.

    ВыполнениепрограммыСкомпилированнаяпрограммаготоваквыполнению.Посколькурезультатомработы-С

    ++-компилятора является выполняемый объектный код, то для запуска программы вкачестве команды достаточно ввести ее имя. Например, чтобы выполнить программуMyProg.ехе,используйтеэтукоманднуюстроку:

    С:\...>MyProg.сррРезультатывыполненияэтойпрограммытаковы:

    ЭтомояперваяС++-программа.Если вы используете интегрированную среду разработки, то выполнить программу

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

    Необходимо отметить, что все эти программы представляют собой консольныеприложения, а не приложения, основанные на применении окон, т.е. они выполняются всеансеприглашениянавводкоманды.Приэтомвам,должнобыть,известно,чтоязыкС++непростоподходитдляWindows-программирования,C++—основнойязык,применяемыйвразработке Windows-приложений. Однако ни одна из программ, представленных в этойкниге,неиспользуетграфическогоинтерфейсапользователя(GUI—graphicsuseinterface).Деловтом,чтоWindows—довольносложнаясредадлянаписанияпрограммвключающаямножество второстепенных тем, не связанных напрямую с языком C++ В то же времяконсольные приложения гораздо короче графических и лучше подходят для обученияпрограммированию.ОсвоивC++,высможетебезпроблемприменитьсвоизнаниявсфересозданияWindows-приложений.

    Построчный"разборполетов"Послеуспешнойкомпиляцииивыполненияпервогопримерапрограммынасталовремя

    разобратьсявтом,каконаработает.Поэтомумыподробнорассмотримкаждуюеёстроку.Итак,нашапрограмманачинаетсястакихстрок.

  • /*Программа№1-ПерваяС++-программа.

    Введитеэтупрограмму,затемскомпилируйтеееивыполните.

    */Это — комментарий. Подобно большинству других языков программирования, C++

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

    Комментарий—этотекстпояснительногосодержания,встраиваемыйвпрограмму.В C++ поддерживается два типа комментариев. Первый, показанный в начале

    рассматриваемойпрограммы,называетсямногострочным.Комментарийэтоготипадолженначинатьсясимволами/*изаканчиватьсяимиже,нопереставленнымивобратномпорядке(*/). Все, что находится между этими парами символов, компилятор игнорирует.Комментарий этого типа, как следует из его названия, может занимать несколько строк.Второйтипкомментариевмырассмотримчутьниже.

    Приведемздесьследующуюстрокупрограммы.

    #includeВязыкеC++определенрядзаголовков(header),которыеобычносодержатинформацию,

    необходимую для программы. В нашу программу включен заголовок (ониспользуется для поддержки в С++-системы ввода-вывода), который представляет собойвнешний исходный файл, помещаемый компилятором в начало программы с помощьюдирективы#include.Ниже в этой книгемыближепознакомимся с заголовкамии узнаем,почемуонитакважны.

    Рассмотримследующуюстрокупрограммы:

    usingnamespacestd;Эта строка означает, что компилятор должен использовать пространство имен std.

    Пространстваимен—относительнонедавнеедополнениекязыкуC++.Подробнееонихмыпоговорим позже, а пока ограничимся их кратким определением. Пространство имен(namespace) создает декларативную область, в которой могут размещаться различныеэлементы программы. Пространство имен позволяет хранить одно множество именотдельноотдругого.Другимисловами,имена,объявленныеводномпространствеимен,небудут конфликтовать с такими же именами, объявленными в другом. Пространства именпозволяютупроститьорганизациюбольшихпрограмм.Ключевоесловоusingинформируеткомпилятор об использовании заявленного пространства имен (в данном случае std).ИменновпространствеименstdобъявленавсябиблиотекастандартаC++.Такимобразом,используяпространствоименstd,выупрощаетедоступкстандартнойбиблиотекеязыка.

    Очереднаястрокавнашейпрограммепредставляетсобойоднострочныйкомментарий.

  • //main()-началовыполненияпрограммы.Так выглядит комментарий второго типа, поддерживаемый в C++. Однострочный

    комментарийначинаетсяспарысимволов//изаканчиваетсявконцестроки.Какправило,программисты используют многострочные комментарии для подробных и потому болеепространных разъяснений, а однострочные — для кратких (построчных) описанийинструкцийилиназначенияпеременных.Вообще-то,характериспользованиякомментариев—личноеделопрограммиста.

    Перейдемкследующейстроке:

    intmain()Как сообщается в только что рассмотренном комментарии, именно с этой строки и

    начинаетсявыполнениепрограммы.Сфункцииmain()начинаетсявыполнениелюбойС++-программы.Все С++-программы состоят из одной или нескольких функций. (Подфункцией main

    понимаемподпрограмму.)КаждаяС++-функцияимеетимя,итолькооднаизних(еёдолжнавключать каждая С++-программа) называется main(). Выполнение C++ программыначинаетсяизаканчивается(вбольшинствеслучаев)выполнениемфункцииmain().(Точнее,С++-программаначинаетсясвызовафункцииmain()иобычнозаканчиваетсявозвратомизфункции main().) Открытая фигурная скобка на следующей (после int main()) строкеуказываетнаначалокодафункцииmain().Ключевоесловоint(сокращениеотсловаinteger),стоящеепередименемmain(),означаеттипданныхдлязначения,возвращаемогофункциейmain().Каквыскороузнаете,C++поддерживаетнескольковстроенныхтиповданных,иint—одинизних.

    Рассмотримочереднуюстрокупрограммы:

    cout

  • какой-нибудьошибкой.Словоreturnотноситсякчислуключевыхиспользуетсядлявозвратазначенияизфункции.Принормальномзавершении(т.е.безошибок)всевашипрограммыдолжнывозвращатьзначение0.

    Закрывающая фигурная скобка в конце программы формально завершает ее. Хотяфигурная скобка в действительности не является частью объектного кода программы, её"выполнение" (т.е. обработку закрывающей фигурной скобки функции main()) мысленноможносчитатьконцомС++-программы.Ивсамомделе, еслив этомпримерепрограммыинструкция return отсутствовала бы, программа автоматически завершилась бы подостиженииэтойзакрывающейфигурнойскобки.

    ОбработкасинтаксическихошибокКаждому программисту известно, насколько легко при вводе текста программы в

    компьютер вносятся случайные ошибки (опечатки). К счастью, при попыткескомпилировать такую программу компилятор "просигналит" сообщением о наличиисинтаксических ошибок. Большинство С++-компиляторов попытаются "увидеть" смысл висходномкодепрограммы,независимооттого,чтовыввели.Поэтомусообщениеобошибкеневсегдаотражаетистиннуюпричинупроблемы.Например,есливпредыдущейпрограммеслучайно опустить открывающую фигурную скобку после имени функции main(),компиляторукажетвкачествеисточникаошибкиинструкциюcout.Поэтомуприполучениисообщенияобошибкепросмотритедве-тристрокикода,непосредст�