Èòåðaòîð âûõîäíîãî ïîòîna çaïèñûâaåò ñ ïîìîùüþ îïåðaöèè << ýëåìåíòû â âû- õîäíîé ïîòîê, äëя êîòîðîãî îí áûë ñêîíñòðóèðîâaí. Åñëè âòîðûì aðãóìåíòîì êîíñòðóêòîða áûëa ñòðîêa ñèìâîëîâ, îía âûâîäèòñя ïîñëå êaæäîãî âûâîäèìîãî çía÷åíèя:
Ostream_iteratOr Os(COut, " êã");
*Os = 100; // Áóäåò âûâåäåíî: 100 êã
++Os; *Os = 2; // Áóäåò âûâåäåíî: 2 êã
Ðaññìîòðèì ðåaëèçaöèþ îïåðaöèè ïðèñâaèâaíèя:
Ostream_iteratOr& OperatOr=(COnst T& value){
*Out_stream << value;
if(delim != 0) *Out_stream << delim; return (*this);
}
Çäåñü Out_stream — ññûëêa ía âûõîäíîé ïîòîê, çaäaííûé ïåðâûì ïaðaìåòðîì êîí- ñòðóêòîða èòåðaòîða, delim — ñòðîêa, óêaçaííaя âî âòîðîì ïaðaìåòðå êîíñòðóêòîða.
Ïðèìåð ïðèìåíåíèя ïîòîêîâûõ èòåðaòîðîâ âìåñòå ñ aëãîðèòìaìè áèáëèîòåêè ïðèâåäåí ía ñ. 350.
Функциональные объекты
Ôóíêöèîíaëüíûì îáúåêòîì íaçûâaåòñя êëaññ, â êîòîðîì îïðåäåëåía îïåðaöèя âûçîâa ôóíêöèè (ñì. ñ. 195). Ìû óæå âñòðå÷aëèñü ñ ôóíêöèîíaëüíûìè îáúåêòa- ìè ïðè ðaññìîòðåíèè î÷åðåäåé ñ ïðèîðèòåòaìè (ñ. 313). ×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ðòíaя áèáëèîòåêa ïðåäîñòaâëяåò ìíîæåñòâî ôóíêöèîíaëüíûõ îáúåêòîâ, íåîáõîäèìûõ äëя åå ýôôåêòèâíîãî èñïîëüçîâaíèя è ðañøèðåíèя. Îíè îïèñaíû â çaãîëîâî÷íîì ôaéëå . Cðåäè ýòèõ îáúåêòîâ ìîæíî âûäåëèòü îáúåêòû, âîçâðaùaþùèå çía÷åíèя òèïa bOOl. Òaêèå îáúåêòû íaçûâaþòñя ïðåäènaòaìè. Ïðåäèêaòîì íaçûâaåòñя òaêæå è îáû÷íaя ôóíêöèя, âîçâðaùaþùaя bOOl.
 êa÷åñòâå áaçîâûõ nëaññîâ, êîòîðûå ââîäяò ñòaíäaðòíûå èìåía äëя òèïîâ aðãó- ìåíòîâ, â áèáëèîòåêå îïðåäåëåíû øaáëîíû óíaðíîé è áèíaðíîé ôóínöèè:
template struCt unary_funCtiOn{
typedef Arg argument_type; typedef Result result_type;
};
template struCt binary_funCtiOn{
typedef Arg1 first_argument_type; typedef Arg2 seCOnd_argument_type; typedef Result result_type;
};
Ôóíêöèîí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ëüíûé îáúåêò.
Cò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äaïòåðîâ ðaññìaòðèâaþòñя â ñëåäóþ- ùèõ ðaçäåëaõ.
Do'stlaringiz bilan baham: |