01
од 08
Нови начин за излаз

Ц ++ задржава врло високу повратну компатибилност са Ц, тако да
У претходној лекцији ово се дотакло примером који је користио цоут. Овде ћемо ући у мало већу дубину, почевши од излаза прво јер он изгледа више користи него унос.
Иостреам класа омогућава приступ објектима и методама који су вам потребни и за излаз и за улаз. Размислите о / о у смислу токова бајтова - било да идете од ваше апликације до датотеке, екрана или штампача - то је излаз, или са тастатуре - то је улаз.
Излаз са Цоут-ом
Ако знате Ц, то можда знате << користи се за померање делова улево. Нпр. 3 << 3 је 24. Нпр. Помак у лијево удвостручује вриједност, тако да 3 смјене у лијево множе с 8.
На Ц ++, << је био преоптерећен у остреам класи тако да инт, пловак, и врсте жице (и њихове варијанте - нпр парови) сви су подржани. Овако излазите на текст тако што повезујете више ставки између <<.>
цоут << "Неки текст" << интвалуе << флоатдоубле << ендл;
Ова осебујна синтакса могућа је јер сваки од << је заправо позив функције који враћа а референца на остреам објекта. Дакле, линија попут горње је заправо таква
цоут. << ("неки текст"). цоут. << (интвалуе) .цоут. << (флоатдоубле) .цоут. << (ендл);
Ц функцијапринтф успео је да форматира излаз користећи Спецификаторе формата, као што су% д. У Ц ++ цоут такође може форматирати излаз, али користи другачији начин рада.
02
од 08
Употреба Цоут-а за форматирање излаза
Објектни цоут је члан иостреам библиотека. Не заборавите да ово мора бити укључено са
#инцлуде
Ова библиотека иостреам је изведено из остреам (за излаз) и истреам за улаз.
Форматирање Излаз текста се врши уметањем манипулатора у излазни ток.
Шта је манипулатор?
То је функција која може изменити карактеристике излазног (и улазног) тока. На претходној страници смо то видели << била је преоптерећена функција која је враћала референцу на позивни објект, нпр. цоут за излаз или цин за улаз. Сви манипулатори то раде тако да их можете укључити у излаз << или улаза >>. Погледаћемо улаз и >> касније у овој лекцији.
цоунт << ендл;
ендл је манипулатор који завршава линију (и започиње нову). То је функција која се такође може назвати на овај начин.
ендл (цоут);
Иако у пракси то не бисте урадили. Користите га овако.
цоут << "Неки текст" << ендл << ендл; // Две празне линије
Датотеке су само токови
Нешто за имати на уму да се данас развија много развоја ГУИ апликације, зашто би вам биле потребне текстуалне И / О функције? Није ли то само за конзола апликације? Па, вероватно ћете направити фајлско И / О датотеке и можете их користити и тамо, али и оно што се излази на екран обично треба и форматирање. Струје су врло флексибилан начин руковања улазом и излазом и могу радити са њима
- Текст И / О. Као и код конзола.
- Гудачи. Погодно за форматирање.
- Датотека И / О.
Опет Манипулатори
Иако смо користили остреам класа, то је изведена класа од иос класе која потиче из иос_басе. Ова класа предака дефинише јавност функције који су манипулатори.
03
од 08
Списак Цоут Манипулатора
Манипулатори се могу дефинисати у улазним или излазним токовима. То су објекти који враћају референцу на објект и смештају се између парова <<. Већина манипулатора је декларисана, али ендл, Крајеви и испирати потјечу од
Ево детаљније листе.
Фром
- ендл - Завршава линију и позива флусх.
- крајеви - Уметања '\ 0' ( НУЛА) у ток.
- испирање - Присилите да се тампон одмах избаци.
Фром . Већина је пријављена у
- боолалпха - Уметање или екстрахирање боол објеката као "труе" или "фалсе".
- нобоолалпха - Уметање или вађење боол објеката као нумеричких вредности.
- фиксно - Уметните вредности с помичним зарезом у фиксном формату.
- научно - Убаците вредности са зарезом у тачку у научни формат.
- интерни - Интерно оправдати.
- лево - оправдано лево.
- тачно - оправдање исправно.
- дец - Уметање или екстрахирање целих вредности у децималном формату.
- хек - Уметање или екстрахирање целих вредности у хексадецималном (основном 16) формату.
- оцт - Уметните или извуците вредности у окталном (основном 8) формату.
- носховбасе - Не префиксајте вредност са њеном основом.
- сховбасе - вредност префикса са његовом базом.
- носховпоинт - Ако није потребно, не приказујте децималну тачку.
- сховпоинт - Уметање вредности с помичном зарезом увек приказује децималну тачку.
- носховпос - Не убацујте знак плус (+) ако је број> = 0.
- сховпос - Убаците знак плус (+) ако је број> = 0.
- носкипвс - Не прескачите почетни бели простор приликом вађења.
- скипвс - Прескочите почетни бели простор приликом вађења.
- ноупперцасе - Немојте заменити мала слова великим словима.
- Велика слова - Замените мала слова великим еквивалентима великих слова.
- унитбуф - Исперите тампон након уметања.
- ноунитбуф - Не испирајте тампон након сваког уметања.
04
од 08
Примери помоћу Цоут-а
// ек2_2цпп. #инцлуде "стдафк.х" #инцлудекористећи намеспаце стд; инт маин (инт аргц, цхар * аргв []) { цоут.видтх (10); цоут << ригхт << "Тест" << ендл; цоут << лефт << "Тест 2" << ендл; цоут << Интернал << "Тест 3" << ендл; цоут << ендл; тачност прецизности (2); цоут << 45.678 << ендл; цоут << велика слова << "Давид" << ендл; тачност прецизности (8); цоут << научни << ендл; цоут << 450678762345.123 << ендл; цоут << фиксно << ендл; цоут << 450678762345.123 << ендл; цоут << сховбасе << ендл; цоут << сховпос << << ендл; цоут << хек << ендл; цоут << 1234 << ендл; цоут << окт << ендл; цоут << 1234 << ендл; цоут << дец << ендл; цоут << 1234 << ендл; цоут << носховбасе << ендл; цоут << носховпос << ендл; цоут.унсетф (иос:: велика слова); цоут << хек << ендл; цоут << 1234 << ендл; цоут << окт << ендл; цоут << 1234 << ендл; цоут << дец << ендл; цоут << 1234 << ендл; ретурн 0; }
Излаз из овога је испод, с једним или два додатна размака линија ради јасноће.
Тест. 2. тест Тест 3 46. Давид. 4.50678762Е + 011. 450678762345.12299000. 0Кс4Д2. 02322. +1234. 4д2. 2322. 1234.
Белешка: Упркос великим словима, Давид је штампан као Давид, а не ДАВИД. То је зато што велика слова утичу само на генерисани излаз - нпр. бројеви исписани у хексадецимални. Дакле, шестерокутни излаз 4д2 је 4Д2 када се користи велика слова.
Такође, већина ових манипулатора заправо поставља мало у заставу и могуће је директно поставити ово
цоут.сетф ()
и то очистите
цоут.унсетф ()
05
од 08
Употреба Сетф и Унсетф за манипулисање И / О форматирањем
Функција сетф има две преоптерећен верзије приказане доле. Док унсетф само брише наведене битове.
сетф (вредности заставе); сетф (вредности заставе, маске); унсетф (флагвалуес);
Променљиве заставе су изведене са ОРинг заједно све битове које желите са |. Па ако желите научни, велика слова и боолалпха онда искористите ово. Само су делови прослеђени као параметар су постављени. Остали битови остају непромењени.
цоут.сетф (иос_басе:: научно | иос_басе: велика слова | иос_басе:: боолалпха); цоут << хек << ендл; цоут << 1234 << ендл; цоут << дец << ендл; цоут << 123400003744.98765 << ендл; вредност боол = тачно; цоут << вредност << ендл; цоут.унсетф (иос_басе:: боолалпха); цоут << вредност << ендл;
Производи
4Д2. 1.234000Е + 011. истина. 1.
Маскинг Битс
Два параметар верзија сета користи маску. Ако је бит постављен у првом и другом параметру, тада се поставља. Ако је бит само у другом параметру, онда се брише. Вредности Подесиво поље, основно поље и флоатфиелд (наведене доле) су композитне заставе, то јест неколико застава Или би заједно. За основно поље са вредностима 0к0е00 исто је као дец | окт | хек. Тако
сетф (иос_басе:: хек, иос_басефиелд);
брише све три заставице и затим поставља хек. Слично томе прилагоди поље је лефт | тачно | интерни и флоатфиелд је научни | фиксно.
Списак битова
Ова листа енума преузета је са Мицрософт Висуал Ц ++ 6.0. Стварне вредности које се користе су произвољне - други компајлер може користити различите вредности.
скипвс = 0к0001. унитбуф = 0к0002. велика слова = 0к0004. сховбасе = 0к0008. сховпоинт = 0к0010. сховпос = 0к0020. лево = 0к0040. ригхт = 0к0080. интерни = 0к0100. дец = 0к0200. окт = 0к0400. хек = 0к0800. научно = 0к1000. фиксно = 0к2000. боолалпха = 0к4000. прилагоди поље = 0к01ц0. основно поље = 0к0е00, флоатфиелд = 0к3000. _Фмтмаск = 0к7ффф, _Фмтзеро = 0.
06
од 08
О Клору и Церру
Као цоут, зачепити и церр су унапред дефинисани објекти дефинисани у остреаму. Иостреам класа наслеђује од оба остреам и истреам па је зато цоут примери могу да се користе иостреам.
Буферирано и неоптерећено
- Буферирано - сав излаз се привремено чува у а тампон а затим је у једном потезу бачен на екран. Пуњење и зачепљење су пуферирани.
- Небуферирано - сав излаз одмах иде на излазни уређај. Пример небуферираног објекта је церр.
Примјер у наставку показује да се церр користи на исти начин као и цоут.
#инцлуде користећи намеспаце стд; инт _тмаин (инт аргц, _ТЦХАР * аргв []) {церр.видтх (15); церр.ригхт; церр << "Грешка" << ендл; ретурн 0; }
Главни проблем са пуферирањем је ако програм руши, тада се садржај међуспремника губи и теже је схватити зашто се срушио. Небуферирани излаз је непосредан тако да би пошприцавање неколико редака попут ове могло бити корисно.
церр << "Унос опасне функције заппит" << ендл;
Проблем са евидентирањем
Изградња дневника програмских догађаја може бити користан начин за проналажење тешких грешака - типа који се јављају само понекад и касније. Ако је тај догађај пад сустава, имате проблем - да ли након сваког позива пребаците записник на диск како бисте могли да видите догађаје све до рушења или га држите у међуспремнику и периодично испирајте тампон и надам се да нећете изгубити превише током пада. јавља?
07
од 08
Коришћење функције Цин за унос: форматирани унос
Постоје две врсте уноса.
- Форматирано Читање уноса као бројева или одређене врсте.
- Неформатизовано. Читање бајтова или жице. То даје много већу контролу над улазним током.
Ево једноставног примера форматираног уноса.
// екцин_1.цпп: Дефинише улазну тачку за апликацију за конзолу. #инцлуде "стдафк.х" // Само за Мицрософт. #инцлуде користећи намеспаце стд; инт маин (инт аргц, цхар * аргв []) { инт а = 0; флоат б = 0,0; инт ц = 0; цоут << "Унесите инт, флоат и инт раздвојене размацима" <> а >> б >> ц; цоут << "Унели сте" << а << "" << б << "" << ц << ендл; ретурн 0; }
Ово користи цин за читање три броја (инт, пловак, инт) одвојени размацима. Након уписивања броја морате притиснути ентер.
3 7.2 3 ће се приказати "Унели сте 3 7.2 3".
Форматирани унос има ограничења!
Ако унесете 3,76 5 8, добићете „Унели сте 3 0,76 5“, све остале вредности на тој линији се губе. То се понаша коректно, као. није део инта и тако означава почетак пловка.
Еррор Траппинг
Цин објект поставља битак неуспјеха ако улаз није успјешно претворен. Овај део је део иос и може се читати употребом фаил () функционишу на оба цин и цоут овако.
ако (цин.фаил ()) // уради нешто.
Не изненађује, цоут.фаил () се ретко поставља, барем на излазу са екрана. У каснијој лекцији о датотеци И / О видећемо како цоут.фаил () може постати истина. Постоји и Добро() функција за цин, цоут итд.