Негізгі әдебиет- 5[б 3,59-80 ], 6 [б 4, 103-113],7 [б2,54-62],8 [б 13, 383-393]
Бақылау сұрақтары:
1.Атаулар кеңістігін қоладану міндетті ма?
2. Using және using namespace қолданудың арасында қандай айырмашылық бар?
3.Атаулардың аталған кеңістіктері дегеніміз не және олар не үшін керек?
4. using қызметші сөзін қолданбай атаулар кеңістігінде хабарланған идентификаторларды қолдануға бола ма?
5.stol атауларының стандартты кеңістігі дегеніміз не?
11–Дәріс. Стандартты библиотека құрылғыларымен С++ тіліндегі енгізу-шығару. Ағынды кластар.
Тілдің операторларынан басқа кез келген бағдарламада өндірудің интегрирленген ортасына қосылатын түрлі библиотекалардың құрылғылары қолданылады.С++ тілінің стандартты библиотекасын екі бөлікке бөлуге болады:
С тілінің библиотекасынан мұрагерлік константалар, типтер, макростар, функциялар;
Стандартты кластар мен С++ тілінің басқа құрылғыларының С++ тілінің стандартты кластарын келесі топтарға бөлуге болады.
Сыртқы құрылғылар мен жедел жады арасындағы деректкр ағынын басқаруға арналған ағынды кластар( дисктер, пернетақта, экран, монитор), сонымен қатар жедел жады шектерінде.
Символдық жолдары бар жұмыстың қателерінен қорғалған және қолайлы жолдық класс.
Контейнерлі кластар, алгоритмдер және итераторлар. Контейнерлі кластар деректерді- тізімдер, векторларды, көпмүшеліктерді және тағы басқа сақтауға арналған анағұрлым кең таралған құрылымдарды жүзеге асырады. Стандартты библиотека құрамына компаненттерді түрлендіретін және қолданатын алгоритмдер кіреді.Итераторлар контейнерлі кластар элементтеріне унифицирленген қатынауды қамтамасыз етеді.
Қалқымалы нүктесі бар массивтер мен комплексті деректерді тиімді өңдеуге арналған математикалық кластар.
Типтер идентификациясы мен қателердің объектті бағытталған өңдеуге арналған диагностикалық кластар.
Қалған кластар жадыны- динамикалық тарату, локальды ерекшеліктерге бейімделу және тағы басқа үшін .
Контейнерлі кластар, алгоритмдер және итераторлар кіретін стандартты библиотекасының бөлігін үлгілердің стандартты библиотекасы деп атайды.(Standart Template Library,STL) .
С++ тілінің стандартты библиотекасының ағынды кластарын қолдануға негізделген С++ тілінің енгізу – шығару құралдарын қарастырайық.
Ағын- қоректену көзінен қабылданушыға деректерді тасмалдауға қатысты түсінік. С++ тілінің ағындары деректер типінің стандартты және анықталған қолданушылармен сенімді жұмыспен қамтамасыз етеді, сонымен қатар бірегей және түсінікті синтаксисімен.
Ағыннан деректерді оқу оларды ағыннан алу деп аталады, ағынға шығару- ағынға деректерді қосу немесе орналастыру. Ағын байттар тізбегі ретінде анықталады және алмасу орындалатын нақты қондырғыға тәуелсіз болады.
Алмасу бағытына қарай ағындар кіріс(деректер енгізіледі) , шығыс(деректер шығарылады) және екібағытты деп бөлінеді.
Ағын жұмыс істейтін қондырғы түрлі бойынша ағындарды стандарты, файлдық, жолдық деп бөлуге болады.
Стандартты ағындар деректерді пернетақтал\дан десплей экранына беру үшін арналған файлдық, ағындар- магнитті дискідегі ақпаратпен алмасу үшін, ал жолдық ағындар- символдардың масивтерімен жұмыс істеу үшін.
Ағындарды қолдану үшін С++ тілінің библиотекасына ios және streambur екі базалық класс негізінде құрылған кластар иерархиясы кіреді. Ios класынан енгізу –шығару үшін арналған өріс пен әдістер кіреді, streambur класы ағындардың буферизациясы мен оның физикалық қондырғылармен олардың әсерлесуін қамтамасыз етеді. Бұл кластардан stream класы кіріс ағындар мен оstream класы – шығыс үшін мұрагерленеді.
Бұл кластар екі бағытты ағындардыжүзеге асыратын iostream класы үшін базалық болып табылады. Кейін кластар иерархиясында файлдық және жолдық ағындар орналасқан.
Си тілінің енгізу-шығару стандартты функциясымен салыстырғанда ағындардың негізгі артықшылығы типтерді бақылау болып табылады, сонымен қатар кеңейтілуі, яғни қолданушымен анықталған типтермен жұмыс істеу мүмкіндігі болып табылады. С++ тілі енгізу-шығаруды жүзеге асыруға аранлған құрылғылардың кең жиынын береді. С++ тіліндегі енгізу-шығару бұл- iostream класының ″ «″ және ″ «″ операцияларды қайта кең қолдану.
Енгізілген типтердің енгізу-шығаруды (стандартты) сәйкес кластар және объектілермен, соның ішінде шарт алдын ала анықталған объектілерден қолдау табады: cin, cout, cerr және clog.
Мысалы, cout « х; операторы шығару үшін iostream класының cout объектісіне х айнымалысының мәнін жібереді.Қайта жүктелген operator « әдісі ол үшін шақырылған iostream объектісіне сілтемені қайтарады. Сондықтан шығару операциясының негізінде тағы бір шығару операциясын қолдануға болады, яғни шығарудың бірнеше операциясын бір тізбекке қосуға болады.
Include
Int x ; cout«″ =″ « x«″ \n″;
″ «″ операциясында солдан оңға қарай есептеу тәртібі бар екендігін ескеріп, бұндай жазба келесі түрде интерпретирленеді:
((cout. operator «(″ x=″ )) operator « (x)). Operator « (“\n);
Берілген аргументтің типіне тәуелді operator « әдісінің белгілі бір данасы шақырылады.
С++ т ілінің шығуға ұқсас ену анықталады. Енгізілген стандартты тип үшін ″ «″ операциясы қайта жүктелген анықталған iostream класы байланысты .Сонымен бірге operator « әдісі iostream класс объектісіне сілтемені қайтарады, және енгізу кезінде енгізу операцияларын біріктіруге болатындығын білдіреді, мысалы, үш аргументті:
// cin .operator» (х) ) . operator» (у ) . operator» (z ) ;
Енгізу және шығарудың нақты операциясын таңдау енгізілген немесе шығарылған деректердің әрбір типімен анықталады.
Енгізілген типтермен қатар С ++ тілі жаңа типтерді анықтауға мүмкіндік береді( қолданушымен анықталған типтер). Ол үшін қайта жүктелетін функцияны қолданумен бірге әрбір қолданушы типі үшін ″ «″ және ″ «″ операциясын қайта жүктеу керек.Қайта жүктейтін әдіс ″ «″ немесе ″ «″ операциясы үшін міндетті түрде класқа дос болуы керек, бірақ кластың мүшесі болмау керек, себебі мұнда операциялардың операндалары түрлі кластан алынған !
Енгізу-шығару операцияларын қайта жүктеу бөліктерін көрсететін мысалды келтірейік.
Class Complex // класс кешенді сан
{ int real, image ;
public:
Complex ( int re, int im) {real=re; image=im;}
friend ostream & operator« (ostream &,const Complex &);
friend istream & operator» (istream &, Complex &);
};
ostream & operator« (ostream & obj_out, const Complex & val_out)
{ return obj_out « val_out.real «″i″ « val_out.image «endl;}
// obj_out- шығарылатын объект , val_out шығарылатын мән
Енгізу үшін ″>>″ операциясын қайта жүктеу.
istream & operator » (istream & obj_in, Complex & val_in)
{ obj_in» val_in.real>>val_in.image;
if(!obj_in) { cout «″ \n енгізудегі қате ″ « endl;exit(1);}
return 0;
}
int main (void)
{Complex obj(12,21);
cout«″ объект мәні: «″obj;
cout«″\n кешенді мәнді енгізуіңіз : ″ ;cin »obj;
cout«″\n объект мәні: obj=“« obj;
return 0;
}
Ағынды кластарда форматтауды үш әдіспен орындауға болады- манипуляторлар көмегімен (ең қолайлысы) , форматтау жалауларымен және форматтау әдістері көмегімен.
Ағынды кластар құрамына дәлдігі әртүрлі, белгілі бір сандар жүйесіне мәндерді енгізу немесе шығаруға мүмкіндік беретін құралдар кіреді. Шығарылатын мәндер шығару өрісінің сол немесе оң жақ соңына қысуға болады. Форматталған енгізу-шығару құрылғылары енгізу–шығару форматының басқа да бөлшектерін басқаруға мүмкіндік береді. Берілген мүмкіндіктерді жүзге асыруға, анағұрлым қолайлы әдістерінің бірі манипуляторларды қолдану болып табылады.
Манипуляторлар, форматталған енгізу- шығаруды кодтауды жеңілдететін, қайта жүктелетін әдістерді қолданады. Мапипуляторларды, ″ » ″ , ″ «″ операциялары көмегімен енгізу–шығару тізбегіне енгізуге болады. Манипуляторлар, параметрленген болады, яғни бір аргументі, бар функцияны шақыру түрінде жазылады, және қарапайым яғни манипулятор атынан кейін аргументі бар дөңгелек жақшалар болмайды.Параметрленген манипуляторларды қолдану үшін бағдарламаға файлын қосу керек.
Достарыңызбен бөлісу: |