Г. Шилдт - Полный справочник по C++ (1109478), страница 47
Текст из файла (страница 47)
Некоторые из них считают, что объявления, разбросанные по всему тексту, затрудняют анализ программ. По этой причине программисты нс придают этои возможности большого значения. В нашей книге мы не принимаем чью-либо сторону. И все жс в особых случаях, в частности в больших функциях, объявление переменных непосредственно перед их использованием облегчает отладку программ. Правило 'ЧП$ по умолчанию" Несколько лет назад в языке С++ появилось новшество, которое может повлиять на совместимость новых программ и кода, написаююго на старых версиях С++ и на языке С. В спшдарте С89 и в исходном варианте языка С++ отсутствие явного типа в объявлении переменной по умолчанию трактовалось как ьпв.
Олнако правило "1вв по умолчанию" при стандартизации было отброшено. В стандарте С99 его также нет. И все же на практике по-прежнему часто встречаются программы на языке С и старые программы на языке С++, в которых используется это правило. В большинстве случаев это правило спносится к типу значения, возвращаемого функцией. В частности, стало общепринятой практикой не указывать тип возвращае- Глава 11. Обзор яэьва С++ которыс программы могу~ создать проблемы. В процсссс станлартизации комитет А)чб!/15О внсс в язык значитсльныс усовсршснствования.
Стремясь соответствовать стандарту, разработчики компиляторов учли их в своих про()заымах. Разумсстся, мсжду появлснисм ~юлой возможности языка и сс рсализациси в коммсрчсских компиляторах вссгда прохолит опрсдслсннос врсмя. Поскольку новшества вносились в язык на протяжении нескольких лот„сгарыс всрсии компиляторов нс смогли их учесть. Это очень важно, поскольку два послсдних усоясршснсгвоваиия каса(отса буквально всех программ, включая самью простые.
Если ваш компилятор ((с полдсрживаст эти возможности, нс псчальтссь — эти прспятствия легко обойти. Принципиальная разница мсжду старым и новым стилями сволится к двум свойствам: (юный стиль заголовков и использованис оператора па»зеврасе. Чтобы понять эти различия, рассмотрим лвс простсйшис программы на языке С++. Псрвая из них соотвстсгвуст старому сзилю програмл(ирования /* Црограмма на С++ з старом стиле.
*/ З(ПС1ийЕ <ХОЗХХЕаы го> хпс гзайп О ( хехихп 0; ) Обратите особов анима((ис иа дирсктиву йхпс1ийе. Она вкл(очаст в текст программы заголовочиый файл йовххее»а.)х. а нс заголовок <1овахеае>. Кроме того, в этом вариаитс программы отсутствует опсратор патевраое.
Рассмотрим вторую сколот((ую программу, соотвстствуюшую новому стилю. / » Современный стиль программ>: нз языке С++, использупаий новый зил заголовков и пространство имен. */ Мхп<1ийе <хозххеам> из(од патезрасе вхй; 1пх ыайг.() ( хехихп О; ) В этом варианте программы использустся новый вид заголовков и пространстяо имен.
Оба эти свойства мы ужо упоминали. Рассмотрим их поближе. Новый стиль заголовков Как извсстно, для вызова стандартной библиотсчцой функции программа должна содсржать заголовочный файл. Для этого в программу включа>от дирсктиву йхпс1ийе. Например, в языке С, чтобы ввссти в программу заголовочный файл <вайхо.)х>, цсобходимо выполнить слсдуюший оператор. В Фхп<1ийе <зсй1о.)»> Здссь параметр вхй1о.)х прсдставдяст собой имя файла, в котором обьявлсны прототипы функций ввода-вывода, а директива прспроцсссора йапо1ийе вынуждаст компилятор включить этот файл в тскст исход((ой программы.
Итак, слсдуст помнить, что директива йапс1ийе вклл»чае/л файл в текст программы. Глава 11. Обзор языка С+э На п>ютяжении нескольких лет после своего появления язык С++ использовал тот жс стиль работы с заголовками, что и язык С. Иными словами, в нем применялись заголовочные фаилы.
Стандартный С++ также допускает использование заголовочных файлов в стиле языка С, позволяя программистам сохранять обрап>ую совместимость программ. Однако стандарт языка С++ предусматривает новыи вид заголовка, которыи используется в стандартной библиотеке. Эти заголовки не являются ф>айлпл>и.
Они просто представляют собой некие ста>шарп>ыс идентификатора>, которые могут соответствовать фаилам, а могут нс соответствовать им. Новые заголовки являются абстракцией„гарантирующей, что в программе будут объявлены соответствующие прототипы и определения, необходимые для вызова библиоте*шых функций. Поскольку за>оловки нового стиля нс являются именами файлов, у них нет расширения .зз. Они состоят лишь из имени заголовка, заключенного в угловые скобки. Рассмотрим, например, нскоторыс стандаршые заголовки нового стиля. <довсхеа>я> <хвьееа>в> <>геееох> <вскьпд> Новыс заголовки включаются в программу с помощью директивы >>впезц>зе, Еаинствсш>ая разница состоит в том, что заголовки нового стиля не обязательно являются именами файлов.
Поскольку язык С--ь унаследовал асс библиотеки функции языка С. он прололжаст поддерживать стандартные заголовочные файлы языка С. Иначе говоря, заголовочные файлы, такие как ведро» или ееуре.», по.прежнему доступны. Олнако стандарт языка С++, кроме них, определяет заголовки нового вида, которые могут заменять собою реальные заголовочные файлы.
В программах на языке С++ к именам заголовочных файлов языка С лобавляется префикс "с", а расширение " з>" отбрасывается. Например, заголовочному файлу ыае».з> я старом стиле соответствует заголовок <ев>аез», а файлу вехьпд.» — заголовок <евеххпд>. Несмотря на то что использование заголовочных файлов старого образца допускается, в стандарте языка С++ этого делать не рекомендуется, В нашей кни~е мы придерживаемся >ювого стиля заголовков.
Если ваш компилятор не поддерживает новый стиль заголовков, мож>ю просто заменить их именами заголовочных файлов старого образца. Поскольку новый стиль заголовков появился относительно недавно, многие старые программы не используют его. В них по-прежнему применяются заголовочные файлы в стиле языка С.
Например, имя заголовочного файла, содержащего прототипы функций ввода-вывода, указывается так. >> взвози<>е <Зоасхевп>.»> Эта директива вынуждает компилятор включить в программу заголовочный файл хедвехеав>.з>. Как правило, имена заголовков старого и >ювого стиля совпадают, за исключением расширения ".з>".
Как извесшо, все компиляторы допускают использование заголовочных файлов старого стиля. Однако этот стиль считается устаревшим, и его не рекомендуется применять в новых программах. Несмотря на то чпю заголовки сгпврого стиля все еи>е применяккпся в сущестгующик программах не С++, пни считаются устаревшими. Пространства имен При включении в про~рамму заголовка нового стиля его содержимое погружается в пространство имен вед. Пространство имен — это просто область видимости. Оно предназ>шчено для локализации имен илентификаторов и предотвращения конфликтов между ними, Элементы, объявлсннь>с в одном пространстве имен, отделены от элементов, принадлежащих другому пространству.
Изначально имена библиотечных Часть й. Язык С++ функций просто размещались в глобальном пространстве имен (как в языке С). Однако после появления заголовков нового образца их содержимое стали размегдать в пространстве имен вед. Позднее мы рассмотрим этот вопрос более полробно, а пока эта проблема ис должна иас во/пювать, так как оператор $ ив1по паееврасе вела; погружает пространство имсп в область вилимости (т.с. пространство имен ве6 включается в глобальное пространство имси). Этот оператор уничтожает разницу между заголовками старого и ново~о стиля. И сщс одно: чтобы сохранить совместимость с языком С, принято следующее соглашение.
Если программа, написающя на языке С++, содержит заголовок старого стиля, его содержимое погружается в глобалыюе пространство имен. Зто позволяет компилятору языка С++ компилировать программы, написанные на языке С. Работа со старым компилятором Как мы уже говорили, пространства имен и заголовки нового стиля появились относительно пелавно.
Они были лобавлспы в процессе стандартизации языка С++, Несмотря на то что все |ювые компиляторы язгяка С++ поддерживают эти свойства, старые компиляторы могут их ие учитывать. В этом случае компилятор выдает на экран сообщения об ошибках, Эту проблему очень легко решить: пужаю лишь заменить заголовки имеиами заголовочных файлов старого стиля и удалить оператор павевраое. Иначе говоря, следупг заменить операторы В1пс1ибе <зовигеаьт> ивьгд патеврасе вег); оператором а $1пс1иде <ьовегеап.)з> Зто изменение превращает современную программу в старомодную. Поскольку солержимое всех заголовочных файлов погружаемся в глобальное пространство имен, оператор павевраое теперь не нужен. И последнее: в обозримом будущем на практике еше долго будут встречаться программы, написанные в старом стиле, использующие заголовочные файлы и нс применяющие оператор ивхпвь Все совремеипыс компиляторы справляются с ними без проблем.
Однако новые программы слелуст писать в современном стиле, поскольку лишь он поддерживается стъидартом языка С++. Несмотря на то что старомодные программы еще многие голы будут поддерживаться компиляторами, следует помнить, что их структ)ра является слишком жесткой. Введение в классы В этом разделе рассматривается самая важная часть языка С+в — класс.
Для того чтобы создать объект, в языке С++ сначала необходимо опрелелить его общий вид, используя ключевое слово о1авв. С синтаксической точки зрения класс похож ца структуру. Рассмотрим в качестве примера класс, определяющий тип под названием аеас)с. С его помощью можно создать реальный стек. ВбеГ1пе В1ВЕ 100 // В этом фрагменте объявляется класс веаок. о1авв веаск ( ьпс всей(Я12Е)." гз7 Глава 11.
Обзор языка С++ ьос сонг роЫ).с: ио(с) ьп(с (), иоьс) ривб(зпс 1)г (пс рор(); Класс может содержать открытук) и звкрьпую )асти. По умолчанию все члены класса считаются закрытыми Например, псрсмсппыс все)с и сов явля)отса закрытыми. Это озиачаст, по к )шм )гсвозможгго обратиться из функций, нс являющихся члсиами класса всас)с. Таким образом лостигастся инкапсуляция -- доступ к закрытым элементам класса строго кглпролирустся. В классс можно также опрслслить закрытые функции, которые могут вызываться другими члс)шми класса. Для того чтобы открыть элсмспты класса (т.с. сделать их досгупиыми для других частей про)раммы), следует обьявить их с помощью ключсижо слова ролзе.