Г. Шилдт - Полный справочник по C++ (1109478), страница 46
Текст из файла (страница 46)
Перед изучением объектно-ориентированных конструкций языка С++ следует тшательно изучить основные элементы программ, написанных на нем. В этом разделе рассматриваются вопросы, касающиеся практически всех программ на языке С++. По ходу изложения мы также будем полчеркивать различия межлу стандартом языка С++, языком С и ранними версиями языка С++.
Пример программы на языке С++ рассмотрим простую программу на языке С++. язпс1ице <Тсзсгеат> ив)пд патезрасе вес); Ъпс паз.и() ( Ъис Тг саче « "Это — вывод.~п"; // однострочный комментарий /* Комментарий в стиле языка Р "/ // Ввод числа с помощью оператора » сове « "Введите число: схп » // Теперь выведем число с помощью оператора « Глава 11. Обзор языка С++ соцс « з « " в квадрате равно < з"з « "~п"; ге(:игп Ог ) Очевидно, что эта программа сильно отличается от программ, приведенных в первои части.
В нсй есть весьма гюлсзныи однострочнь(и комментарий. Она начинается с включения заголовка <зоаекеадг>, поддсрживакядсго ввод-вывол в стмле языка С++, (Аналогом заголовка <1оаекааж> в языке С является заголовочныи файл <всгззо.Ь>.) Обратите внимание на ешс олпу особешюстгк заголовок хоаекеам не имеет расширения .)з, поскольку стандарт языка С-~.ч- не использует сгарый стиль. Следующая строка програлгмы $ цвзпд дагкеарасе еецг сообшает компилятору, что следует использовать пространство имсп асс). Пространсгво имен прслставляст собой новшество, недавно включенное в язык С++. Пространство имен созласт область видимости, в которои могут размещаться различные элементы програьглзы.
Они позволякзт организовывать большие прогрггхгкгьь Опсратор цазпя информирует компилятор о том. что программист желает использовать пространство имен всгт. В этом пространстве имен объявлена вся стандартная библиотека языка С++. Таким образом. пространство измен вест упрощает поступ к стандартнои библиотеке. Программы, включенные в первую часть книги, использовали только язык С. Пространства имен в них были не нужны, поскольку по умолчанию библиотечные функции языка С находятся в глобалыюм пространстве имен. Поскольку зааоловки в новом стиле и пространства имен включены в язык С+-~ лишь недавно, старые приараммы их не используют.
Крома гпоао, старые компиляпюры также не поддерживают згпи механизмы. Как гюсгпупать е таких ситуациях, мы расскажем ниже. Рассмотрим теперь следующую строку. я зпе ага>и() Обрати~с внимание на то, что список параметров функции вгазп() пуст. Этим она отличается от языка С, в котором функш(я, нс имеющая параметров, должна вместо списка параметров использовать ключевое слово чозс(. $ хпь гзахп(иохс)) Именно так объявляяась функция мазпщ в псрвои части книпс Однако в языке С++ использовать для этого ключевое слово воза совершенно нс обязательно Как правило, в языке С++, если функция не имеет параметров, список параметров просто не указывается и слово <го(х( в скобках юписывать не нужно. Следующая строка иллюстрирует два свойства языка С-;+, я соде « "Это — вьгаод.'зп", гг' Однострочньги комментарий Во первых, оператор (я сои(.
« "Это — вывод.'хп"; выводит иа экран сообщение "это — вывод." и вьшолняез переход на следующую строку. В язьгке С++ оператор "«" имеет несколько значении Он по-прежнему является оператором побитового сдвига влево, но, как показывает данный пример, также используется в качестве операпюра вьгвода, Слово ооце представляет собой идентификатор, связанпыи с экраном.
(На самом деле язык С++, как и язык С, поддерживает перенаправление ввода-вывода, но для простоты будем предполагать, что идснтифика- Часть!!. Язык С++ тор попе всегда связан с экраном.) Идентификатор соце и оператор "«" можно применять для вывода данных любого встроенного типа, а также сии волг ных строк. Обратите внилзание на то, что для вывода можно по-прежнему использовать функцию ре1педО и другие функции. предусмотренные для ввола-вывода данных в языке С.
Олнако большинство программистов полагшот, что использование оператора "«" больше соответствует духу языка С++. Более з ого, хотя применение функции ркхпех() при выводе строк фактически эквивалентно оператору "к<". система ввода- вывода языка С++ предоставляет программистам болсс широкие возможности, позволяя вводить и выводить объекты, а не только даппыс встроенных типов, как в языкс С. Вслед за оператором вывола в программе помещен однострочный комментарии (а(пя!е.))пе сошглеп!). Как указывалось в главе (й, в языкс С+е есп лва вила комментариев.
Во-первых, в программах можно по-прежнему использовать многострочные комментарии в стиле языка С. Кроме пих, используя символы гг, можно определять однострочные комментарии. Компилятор ипюрирует их содержимое комментариев. Как правило, программисты используют многострочные комме|парии лля пространных описаний, а однострочные -. для кратких замечании. Затем программа предлагает пользователю ввести число, которос считывается с клавиатуры с помощью оператора $ схп » 1; В языке С++ оператор "»" по-прежнему является оператором побитового сдвига вправо.
Однако, как показано выше, в языке С-:::-ь он играет роль оператора вывода. Этот оператор присваивает переменнои х значение, ввслешгое с клавиатуры. Идентификатор с1п означает стандартный поток ввода, обычно связанный с клавишурой. Как правгьао, выражение с(зз "»" позволяет вволить ланныс любгях встроенных типов, а также строки. Списанная выгое строка кода не садержигп опечагпок.
В часпмосггв, перед иденпафикалюром з не следует ставить символ в. При вводе онформацоо с помои(ью функций языка С, например, функции еселл О, необкодоьа лвредазаль указатель на переменную, погвчаюоую значение. Именно по элюи причине перед еа имегюм е языке С необходимо указывать оператор получения адреса а Однако оператор вяз" е юыке Сь+ реализован иначе, поэтому он не используегп !точное говоря, не должен использована) операгпср гюлученоя адреса а Причины объясняются в главе ГЯ В программе на языке С++ вместо опсразора "»" можно применять любые функции ввода, предусмотренные языком С, в частности, функпию всапх(), хотя в данном примере эта возможность не использовалась. Однако, как и при использовании оператора "«'", большинство программистов полагают. что оператор "»" больше соответствует духу языка С-ьъ.
Рассмотрим егце одну интересную строку программы. $ соов « 1 « "в квадрате равно " « !'1 « "Хп"; Предположим, по переменная х имеет значение )О Тогда данныи оператор выведет на экран фразу "10 в квадрате равно 1оо"'. Как видим, в однои и той же строке программы можно использовать несколько операторов «подряд. Программа завершается оператором $ гесогп 0; Он возвращает вызывающему процессу (как правило, операционнои сисзсме) пулевое значение.
В программе на языке С'+ этот оператор работаег точно так же, как и в программе на языке С. Нулсвое значение является признаком нормального завершения работы программы. Аваряйное завершение должно сопровождаться возвращением ненулевого значения. Кромс топз, в этом случае можно применять именованные константы кххт Вцсскяв и ккхт клххцвк, Глава )!. Обзор языка С++ Операторы ввода-вывода Операторы "«'* и "»" можно применять соответственно для вывода и ввода данных любо~о встроенного типа.
Например, слелующая программа вводит ланные типа В1оае, доиЪ1е и строку, а затсм выводит их на экран. ехпс1ш)е <хозегеащ> изхпс паюеврасе зес); хпс щахп() ( х1оас Е/ с)хат всг(80); стоп)х1е хт; сове « введите два числа с плавающей запятой". схп » х » С(: сове « "Введите строку: схп » вел; сонг. « х « " " « гт « ' " « всг; гееигп 0; Запустите эту программу и попробуйте ввести строку "это проверка", когда она прелложит это сделать. Программа вывелет на экран лишь слово "Вто".
Остальная часть с(роки будет проигнорирова~(а, поскольку за словом *'это" следует разделитель. Таким образом, строка "проверка" не считывается программой. Кроме того, этот пример показывает, что в одной и тои же строке можно применязь несколько операторов ввода "«" подряд. Операторы енола-вывода, предусмотренные в языке С++, реагируют на все эскейп-последовательности, перечисленные в главе 2. Например, следующий фрагмент является совершенно правильным. $ соив « "дхевхСС; Этот оператор вывалит на экран символы /х, В и С. разделенные табуляцией. Объявление локальных переменных Если вы знаете язык С, обратите внимание на важное различие между языками С и С++, касающееся объявления локальных переменных.
В сганлартс С89 локальные переменныс каждого блока должны быть объявлены в его начале. Переменные нельзя о(лишить после выполняемого оператора. Например, в стандарте С89 слелуюший пример является неправильным. /* Фрагмент, неправильна й в языке С. В языке Сь~ это вполне допускается */ хпе с() ( ъпе х; 10: хпе з; /* В программах на языке с так делать нельзя. */ х.*2; гесигп 3; Часть 1!. Язык С++ В программах, соответствующих станларту С89. эта функция вызовет сообщение об ошибке, поскольку между объявлениями переменных 1 и З находится опсРатор присваивания. Однако, сели скомпилировать этот фрагмент в программе на языке С++, все будет в порядке.
В языке С++ (и С99) переменныс можно объявлять в любом месте программы, а не только в начале блоков. Рассмотрим еще олин пример. Это вариант программы из прелыдущсго раздела, в котором переменная ясх обьявляется только тогла, когда в ней возникает необходимость. Мьп<1иое <)оясхевт. ияьпд пвгвеярвсе ясо; упе ваап() х1овх х; с)оиЫе с); сове « "Епсех Хио Й1ояс)пд ро)пе потЬехя: с1п»Е»З; совх « "введите строку: <бах яъх(60); Г/ Строка яхх ооъявляется алесь, сьп » ясх; соих « х « " " « о' « " " « яех; хехохп О; ) Программист может сам решать, где ему улобнее объявлять переменные.
Однако, следуя принципам инкапсуляции кода и данных, переменные рекомендуется объявлять поближе к месту их применения. В предыдущем примере объявления переменных были разделены просто лля демонстрации такой возможности, но в других ситуациях зто свойство языка может оказаться намного ценнее. Объявление переменных непосредствсюю перед их использованием позволяет избежать возможных побочных эффектов. Однако наибольшую пользу это приносит в больших функциях. Честно говоря, в коротких функциях (к которым относится большинство наших примеров), пет особого смысла распрслелять объявления переменных по всему тексту. достаточно просто объявить их в самом начале функции. Поэтому мы булсм применять этот прием сообргзно размерам и сложности создаваемых функций. У специалистов нет общего мнения по поводу локализации объявления переменных.