46
ағынды кластардан қайта жүктелген операцияларды ″«″және ″»″, жалауларды
және
форматтау әдістерін, манипуляторларды, ағындар күйін тексеру
құрылғыларын және тағы басқаны мұрагерленеді.
Программада файлдарды қолдану келесі әрекеттерді тұжырымдайды:
1)
Ағынды құру.
2)
Ағынды ашу және оны файлмен байланыстыру.
3)
Ағынмен алмасу (енгізу-шығару).
4)
Файлды жабу.
5)
Ағынды жою.
Параметрлері жоқ конструкторлар объектті файлмен байланыстырмай
құрады. Параметрлері бар
конструкторлар объект құрады, берілген режимде
көрсетілген
аты
бар
файлды
ашады
және
файлды
объектімен
байланыстырады. Егер үнсіздік бойынша файлды ашу режимінің мәні
программист үшін қолайсыз болса,
онда операция арқылы, ios класында
анықталған, биттік маскалардан құралған басқа мәнін орнатуға болады.
Ағынды құрған соң, оны файлмен байланыстыру әдістерінің бірі,
ағынды кластардың барлық файлдарының мүшесі
болып табылатын, open ( )
функциясы болып табылады. Егер open ( ) функциясының орындалуы
қатемен аяқталса, онда бульдік өрнекте ағын false мәніне тең болады. Файлды
жабу үшін қайтарылатын мәні мен параметрлері жоқ close ( ) функциясы
колданылады.
Программалаудың негізгі, мынадай аспектілерін бейнелейтін бір
тәжірибеде маңызды мысалды қарастырайық:
ағынды енгізу-шығару;
туынды класс конструкторынан, базалық класс конструкторына параметрлерді
берген кезде, класс үлгілерін қолдану; динамикалық
жадыда
орналастырылған екі өлшемді массивпен жұмыс. Келтірілетін программмада
аспектілердің тек көрсетілген ерекшеліктері ғана қарастырылады, ал бақылау
түрлері ескерілмеді.
// Файлдарды ашу/жабу үшін IOFile класын анықтау
Class IOFile : public fstream
{ public : void open_f(char *filename, int mode ){ open (filename, mode );
void close _f(char * filename){ close ( );}
};
// матрицалармен жұмыс істеуге арналған, базалық кластар үлгісі
template
// T-элементітің жалпы типі
class Matrix_B
// класс-«Матрица» - базалық класс
{ protected:
T**array; // жолға көрсеткіштер массивінің көрсеткіші
іnt rows, columns;
public: Matrix_B (int n, int m);
// конструктор
Matrix_B (const Matrix_B ©);
// көшіру конструкторы
~Matrix_B (void); // деструктор
void ReadMatrix (char*fp);
// файлдан матрица элементтерін оқу
49
a1.ReadMatrix( ″matrix.in ″ ); a2 . ReadMatrix( ″matrix.in ″);
fout « ″\na1: ″« endl; a1. PrintMatrix( fout) ;
fout « ″\na2: ″« endl; a2. PrintMatrix( fout) ;
fout « ″\na3: ″« endl; a3. PrintMatrix( fout) ;
//Қайта жүктелген [] - операцияларды тестеу
fout « ″\n қайта жүктелген [] - операцияларды тестеу″
″\n int k=a1[1][1];” « endl ;
int k=a1[1][1]; fout « ″ \n k=” « k «endl;
// Қарапайым мәндерді тестеу
fout « ″\n Қарапайым мәндерді тестеу \n ″
″а3=а1+а2;”« endl;
″а3=а1+а2;
fout « ″\n а3= ”« endl; a3 PrintMatrix(fout);
// Шығару файлын жабу
fout.close_f( ″matrix.out ″);
return 0;
}
Бақылау сұрақтары:
1)
Егер scanf ( ) - fscanf ( ), printf-fprintf-sprintf ( )
жиындары жақсы
жұмыс істесе Енгізу-шығару ағындары не үшін құрылады?
2)
іgnore ( ) әдісін қашан қолдану керек?
3)
Шығарудың қайта жүктелген операторы қандай мәнді қайтарады?
4)
Бүтін сандарды шығарғанда, үнсіздік бойынша шығарудың өрісінің
қандай ені қабылданады?
5)
ios: : ate ашудың қарапайым режимі нені қамтамасыз етеді?
Достарыңызбен бөлісу: