Потоковые классы
Ïîòîn — ýòî aáñòðaêòíîå ïîíяòèå, îòíîñяùååñя ê ëþáîìó ïåðåíîñó äaííûõ îò èñòî÷íèêa ê ïðèåìíèêó. Ïîòîêè C++, â îòëè÷èå îò ôóíêöèé ââîäa/âûâîäa â ñòè- ëå C, îáåñïå÷èâaþò íaäåæíóþ ðaáîòó êaê ñî ñòaíäaðòíûìè, òaê è ñ îïðåäåëåí- íûìè ïîëüçîâaòåëåì òèïaìè äaííûõ, a òaêæå åäèíîîáðaçíûé è ïîíяòíûé ñèí- òaêñèñ.
×òåíèå äaííûõ èç ïîòîêa íaçûâaåòñя èçâëå÷åíèåì, âûâîä â ïîòîê — ïîìåùåíèåì, èëè ânëþ÷åíèåì. Ïîòîê îïðåäåëяåòñя êaê ïîñëåäîâaòåëüíîñòü áaéòîâ è íå çaâè- ñèò îò êîíêðåòíîãî óñòðîéñòâa, ñ êîòîðûì ïðîèçâîäèòñя îáìåí (îïåðaòèâíaя ïa- ìяòü, ôaéë ía äèñêå, êëaâèaòóða èëè ïðèíòåð). Îáìåí ñ ïîòîêîì äëя óâåëè÷åíèя ñêîðîñòè ïåðåäa÷è äaííûõ ïðîèçâîäèòñя, êaê ïðaâèëî, ÷åðåç ñïåöèaëüíóþ îá- ëañòü îïåðaòèâíîé ïaìяòè — áóôåð. Ôaêòè÷åñêaя ïåðåäa÷a äaííûõ âûïîëíяåòñя ïðè âûâîäå ïîñëå çaïîëíåíèя áóôåða, a ïðè ââîäå — åñëè áóôåð èñ÷åðïaí.
Ïî íaïðaâëåíèþ îáìåía ïîòîêè ìîæíî ðaçäåëèòü ía âõîäíûå (äaííûå ââîäяòñя â ïaìяòü), âûõîäíûå (äaííûå âûâîäяòñя èç ïaìяòè) è äâóíaïðaâëåííûå (äîïóñêaþ- ùèå êaê èçâëå÷åíèå, òaê è âêëþ÷åíèå).
Ïî âèäó óñòðîéñòâ, ñ êîòîðûìè ðaáîòaåò ïîòîê, ìîæíî ðaçäåëèòü ïîòîêè ía ñòaí- äaðòíûå, ôaéëîâûå è ñòðîêîâûå.
Còaíäaðòíûå ïîòînè ïðåäíaçía÷åíû äëя ïåðåäa÷è äaííûõ îò êëaâèaòóðû è ía ýêðaí äèñïëåя, ôañëîâûå ïîòînè — äëя îáìåía èíôîðìaöèåé ñ ôaéëaìè ía âíåø- íèõ íîñèòåëяõ äaííûõ (íaïðèìåð, ía ìaãíèòíîì äèñêå), a ñòðînîâûå ïîòînè — äëя ðaáîòû ñ ìaññèâaìè ñèìâîëîâ â îïåðaòèâíîé ïaìяòè.
Äëя ïîääåðæêè ïîòîêîâ áèáëèîòåêa C++ ñîäåðæèò èåðaðõèþ êëaññîâ, ïîñòðîåí- íóþ ía îñíîâå äâóõ áaçîâûõ êëaññîâ — iOs è streambuf. Êëaññ iOs ñîäåðæèò îáùèå äëя ââîäa è âûâîäa ïîëя è ìåòîäû, êëaññ streambuf îáåñïå÷èâaåò áóôåðèçaöèþ ïîòîêîâ è èõ âçaèìîäåéñòâèå ñ ôèçè÷åñêèìè óñòðîéñòâaìè. Îò ýòèõ êëaññîâ ía- ñëåäóåòñя êëaññ istream äëя âõîäíûõ ïîòîêîâ è Ostream — äëя âûõîäíûõ. Äâa ïîñëåäíèõ êëañña яâëяþòñя áaçîâûìè äëя êëañña iOstream, ðåaëèçóþùåãî äâóía- ïðaâëåííûå ïîòîêè. Íèæå â èåðaðõèè êëaññîâ ðañïîëaãaþòñя ôaéëîâûå è ñòðî- êîâûå ïîòîêè. Äaëåå ïåðå÷èñëåíû ÷añòî èñïîëüçóåìûå êëaññû ïîòîêîâ.
iOs — áaçîâûé êëaññ ïîòîêîâ; istream — êëaññ âõîäíûõ ïîòîêîâ; Ostream — êëaññ âûõîäíûõ ïîòîêîâ;
iOstream — êëaññ äâóíaïðaâëåííûõ ïîòîêîâ; istringstream — êëaññ âõîäíûõ ñòðîêîâûõ ïîòîêîâ; Ostringrstream — êëaññ âûõîäíûõ ñòðîêîâûõ ïîòîêîâ; stringstream — êëaññ äâóíaïðaâëåííûõ ñòðîêîâûõ ïîòîêîâ; ifstream — êëaññ âõîäíûõ ôaéëîâûõ ïîòîêîâ;
Ofstream — êëaññ âûõîäíûõ ôaéëîâûõ ïîòîêîâ;
fstream — êëaññ äâóíaïðaâëåííûõ ôaéëîâûõ ïîòîêîâ.
Îïèñaíèя êëaññîâ íaõîäяòñя â çaãîëîâî÷íûõ ôaéëaõ:
— áaçîâûé êëaññ ïîòîêîâ ââîäa/âûâîäa;
— ïðåäâaðèòåëüíûå îáúяâëåíèя ñðåäñòâ ââîäa/âûâîäa;
— øaáëîí ïîòîêa ââîäa;
— øaáëîí ïîòîêa âûâîäa;
— ñòaíäaðòíûå îáúåêòû è îïåðaöèè ñ ïîòîêaìè ââîäa/âûâîäa;
— ïîòîêè ââîäa/âûâîäa â ôaéëû;
— ïîòîêè ââîäa/âûâîäa â ñòðîêè;
— áóôåðèçaöèя ïîòîêîâ ââîäa/âûâîäa;
— ìaíèïóëяòîðû (î íèõ ðaññêaçûâaåòñя äaëåå, ñì. ñ. 271).
Ïîäêëþ÷åíèå ê ïðîãðaììå ôaéëîâ è aâòîìaòè÷åñêè ïîäêëþ-
÷aåò è ôaéë , òaê êaê îí яâëяåòñя äëя íèõ áaçîâûì.
Îñíîâíûì ïðåèìóùåñòâîì ïîòîêîâ ïî ñðaâíåíèþ ñ ôóíêöèяìè ââîäa/âûâîäa, óíañëåäîâaííûìè èç áèáëèîòåêè C, яâëяåòñя êîíòðîëü òèïîâ, a òaêæå ðañøèðяå- ìîñòü, òî åñòü âîçìîæíîñòü ðaáîòaòü ñ òèïaìè, îïðåäåëåííûìè ïîëüçîâaòåëåì. Äëя ýòîãî òðåáóåòñя ïåðåîïðåäåëèòü îïåðaöèè ïîòîêîâ (îá ýòîì ðaññêaçûâaåòñя â ðaçäåëå «Ïîòîêè è òèïû, îïðåäåëåííûìè ïîëüçîâaòåëåì», ñ. 284).
Êðîìå òîãî, ïîòîêè ìîãóò ðaáîòaòü ñ ðañøèðåííûì íaáîðîì ñèìâîëîâ wChar_t. Äëя ýòîãî èñïîëüçóþòñя êëaññû wistream, wOstream, wOfstream è ò. ä.1. Ê íåäîñòaò- êaì ïîòîêîâ ìîæíî îòíåñòè ñíèæåíèå áûñòðîäåéñòâèя ïðîãðaììû, êîòîðîå â ça- âèñèìîñòè îò ðåaëèçaöèè êîìïèëяòîða ìîæåò áûòü âåñüìa çía÷èòåëüíûì.
1 Ía ñaìîì äåëå ïîòîêè ðåaëèçîâaíû â áèáëèîòåêå ñ ïîìîùüþ øaáëîíîâ, ïaðaìåòðîì êî- òîðûõ яâëяåòñя òèï ñèìâîëa. Èìåía êëaññîâ äëя ïaðaìåòðîâ Char è wChar_t îïðåäåëåíû ñ ïîìîùüþ typedef.
Do'stlaringiz bilan baham: |