Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»



Pdf көрінісі
бет337/642
Дата30.03.2022
өлшемі3,66 Mb.
#29231
түріПрограмма
1   ...   333   334   335   336   337   338   339   340   ...   642
Байланысты:
pavlovskaia-jogargy-dengeili

#include  

class Hello{

// Өзінің құрылғаны жəне жойылғаны туралы 

// хабарлайтын класс

public:

Hello(){cout << "Hello!" << endl;} 

~Hello(){cout << "Bye!" << endl;}

};

void f1(){

// Файл ашамыз 

ifstream ifs("\\INVALID\\FILE\\NAME"); 

if (!ifs){


244

cout << "Аластама генерациялаймыз" << endl; 

throw "Файл ашуда қате кетті";}

}

void f2(){

Hello H; // Жергілікті объект құрамыз

f1();    // Аластама генерациялайтын 

        // функцияны шақырамыз

}

int main(){

   try{

cout << "try-блокқа кіреміз" << endl; 

f2();

cout << "try-блоктан шығамыз" << endl;

   }

   catch(int i){

      cout << "int өңдеуіші шақырылды, аластама - " 

           << i << endl; 

      return -1;

   }

   catch(const char * p){

      cout << "const char* өңдеуіші шақырылды, 

              аластама - " << p << endl; 

      return -1;

   }

   сatch(...){

      cout << "Барлық аластамалардың өңдеуіші 

              шақырылды" << endl; 

      return -1;

   }

   return 0; // Барлығы сəтті орындалды

}

Программаның орындалу нəтижесі:



try-блокқа кіреміз

Hello!

Аластама генерациялаймыз

Bye!

const char * өңдеуіші шақырылды, аластама – Файл ашуда 

қате кетті

Аластаманың туындауынан кейін 



f1

 функциясынан басқару 



main

 функци-


ясында орналасқан өңдеуішке берілгендігіне қарамастан, жергілікті объектінің 

деструкторы шақырылғанына назар аударыңыздар. Мұнда «



try

-блоктан 

шығамыз» хабарламасы шығарылған жоқ. Программада файлмен жұмыс істеу 

үшін ағымдар қолданылды (олар туралы «Ағымдық кластар» бөлімінде, 283 б. 

жазылады).



245

Сонымен, аластамалар механизмі қателіктер туындаған кезде объектілерді 

дұрыс жоюға мүмкіндік береді. Сондықтан ресурстарды бөлу жəне босатуды 

кластар түрінде ұйымдастырған тиімді болып саналады, өйткені олардың 

конструкторы ресурсты бөледі, ал деструкторы – босатады. Мысал ретінде 

файлмен жұмыс істеуге арналған класты келтіруге болады. Класс конструк-

торы файлды ашады, ал деструкторы – жабады. Мұндайда қателік туындаған 

кезде файл дұрыс жабылып, ақпарат жойылмайтынына кепілдік берілетінін 

айтуға болады.

Жоғарыда көрсетілгендей, аластама стандартты немесе қолданушы 

анықтаған типте болуы мүмкін. Бұл типті ауқымды түрде анықтаудың қажеті 

жоқ, оның аластама туындаған нүктеде жəне аластаманы өңдеу нүктесінде 

белгілі болуы жеткілікті. Аластаманы бейнелейтін класты, онымен жұмыс 

істегенде осы аластама туындауы мүмкін басқа кластың ішінде сипаттауға бо-

лады. Осы кластың көшірме конструкторы 



public

 болып жариялануы тиіс, 

өйткені оған кері жағдайда аластама туындағанда объектінің көшірмесін құру 

мүмкін болмай қалады (келісім бойынша құрылатын көшірме конструкторының 

спецификаторы 

public

 болады).





Достарыңызбен бөлісу:
1   ...   333   334   335   336   337   338   339   340   ...   642




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

    Басты бет