1-Дәріс. Объектіге бағытталған бағдарламалаудың технологиясы



бет31/43
Дата07.01.2022
өлшемі357,5 Kb.
#19368
1   ...   27   28   29   30   31   32   33   34   ...   43
Байланысты:
дәрістер жинағы

Негізгі әдебиет- 5 [б.11,379-430],6 [б.5,114-135],8 [б.8,239-297].

Бақылау сұрақтары.

1. Қалай анықталады, енгізудің ″ » ″ және шығарудың ″«″,қайта жүктелген операцияларын қашан қолдануды ″«″, немесе ағын кластың басқа әдістерін?

2.cerr мен clog арасында қандай айырмашылықтар бар?

3. Енгізудің қайта жүктелген операторы дегеніміз не және ол қалай жұмыс істейді?

4.Шығарудың қайта жүктелген операторы дегеніміз не және ол қалай жұмыс істейді?

5.Шығарудың қайта жүктелген операторы қандай мәнді қайтарады?


12–Дәріс. Файылдық енгізу-шығару.

  • Файлдық енгізу

  • Файлдық -шығару.

Файлдық және консольды енгізу–шығару өте қатты жақын байланысқан.Нақты түрде файлдық енгізу-шығару консольды енгізу-шығару сияқты сол кластар иерахиясынан қолдау табады.

Бағдарлама өз жұмысын бастаған кезде, төрт ағын автоматты түрде инициализацияланады (жүктелінеді) және оларға сәйкес стандарттты файлдармен (қондырғылармен) байланысады – бұл cin, cout, cerr және clog. Егер басқа ағындарды инициялизациялау және кейбір файлдармен байланыстыру керек болса , онда мұны айқын түрде істеу керек.

Кез-келген инициализацияланатын файлдық ағын енгізу ағыны немесе шығару ағыны, немесе енгізу-шығару ағыны болу мүмкін. Енгізу ағыны бұл istream класынан туындаған, istream класының объектісі. Шығару ағыны –бұл оstream класынан туындаған, оfstream класының объектісі.Енгізу-шығару ағыны-бұл iostream класынан туындаған, fstream класының объектісі. Осы кластардың әрбіреуінде, класс объектісін сәйкес файлмен біріктіру жұмысын орындайтын конструкторы бар. Файлдармен жұмыс істеу үшін кластар, ағынды кластардан қайта жүктелген операцияларды ″«″және ″»″, жалауларды және форматтау әдістерін, манипуляторларды, ағындар күйін тексеру құрылғыларын және тағы басқаны мұрагерленеді.

Бағдарламада файлдарды қолдану келесі әрекеттерді тұжырымдайды.

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 & copy); // көшіру конструкторы


~Matrix_B (void); // деструктор

void ReadMatrix (char*fp); // файлдан матрица элементтерін оқу

};

template Matrix_B::Matrix_B(int n, int m)



{

array=new T*[n]; // матрицаға сай жадының динамикалық бөлінуі

for(int i=0; i<0; i++) array[i]=new T[m];

for(i=0; i

for(int j=0; j

rows=n; columns=m;

return;

}

// көшіру кострукторы



templateMatrix_B::Matrix_B(constMatrix_B©)

{ array=new Т*[copy.rows];

for(int i=0; i

array[i]=new Т[copy.columns];

for( i=0; i

for(int j=0; j

array[i][j]=copy.array[i][j];

rows=copy.rows; columns=copy.columns;

}

templateMatrix_B::~Matrix_B(void) // деструктор



{ for(int i=0; i

delete [] array;

}

// берілген файлдан матрица элементтерін оқу



templatevoid Matrix_B::ReadMatrix(char*fp)

{ IOFile fin; fin.open_f(fp,ios::in);

for(int i=0; i

for(int j=0; j< columns; j++) fin>>array[i][j];

fin.close_f(fp);

return;


}

// матрицалармен жұмыс істеу үшін туынды класс үлгісін анықтау

template

class Matrix_D:public Matrix_B

{ public: Matrix_D(int nrow, int ncol);

void PrintMatrix(IOFile &); // матрицаны басып шығару

// қосу, меншіктеу және индексациялау амалдарының жүктелуі операцияларын жүктеу

Matrix_Doperator+(const Matrix_D&);

Matrix_D2operator=(const Matrix_D&);

T*& operator [ ] (int index);

// туынды класс конструкторы

template

Matrix_D: : Matrix _D (int nrow, int ncol): Matrix_B( nrow, ncol){ }

// Қосу операцияларын қайта жүктеу

template

Matrix_D Matrix_D: : operator + (const Matrix_D&ref)

{ Matrix_D result (rows, columns); // бос объектті құру

for(int i=0; i

for(int j=0; j

result .array[i][j]=array[i][j]+ref.array[i] [j];

return result;

}

// меншіктеу операциясын қайта жүктеу



template

Matrix_D& Matrix_D: : operator = (const Matrix_D&ref)

{

for(int i=0; i

for(int j=0; j

array[i][j]=ref.array[i] [j];

rows=ref.rows; columns=ref.columns;

return*this;

}

// матрицаны басып шығару



template

void Matrix_D: : PrintMatrix(IOFile & fout)

{

for(int i=0; i

{for(int j=0; j

fout « array[i][j] « ;

fout « endl;

}

return;



}

// идекcация операциясын қайта жүктеу

template

T*& class Matrix_D: : operator [ ] (int index)

{ return array[index];

}

// программаны тестеу



int main(void) //сәттілік кезінде, main о қайтарады

{ IOFile fout; // ″ matrix.out ″ файлына жазуға арналған объект ;

fout.open_f(“matrix.out”, ios::out);

// объект массивтерді құрамыз, оларды файлдан толтырамыз және басып шығарамыз

Matrix_D a1(2,2), a2(2,2), a3(2,2);

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   ...   27   28   29   30   31   32   33   34   ...   43




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет