C++ pielāgotie izņēmumi

C Pielagotie Iznemumi



Izņēmums C++ ir pamatjēdziens. Izņēmums rodas izpildes laikā, kad programma saskaras ar izpildlaika neatbilstībām vai neparastiem scenārijiem. Programmā C++ termini “mest”, “mēģināt” un “ķert” tiek izmantoti, lai apstrādātu vai noķertu izņēmumu. Izņēmuma ģenerēšanai tiek izmantota komanda “mest”. Termins “izmēģināt” ir paredzēts izņēmuma izņemšanai, un atslēgvārds “noķer” apzīmē izņēmuma apstrādi, kas ir izstrādāts ar vārdu “mest” un tiek izmests sadaļā “izmēģināt”. Iedziļināsimies dažos piemēros, lai parādītu C++ izņēmumus.

1. piemērs: programma pielāgotas izņēmuma klases izveidei C++ valodā

Šis vienkāršais piemērs ir ieviests, lai demonstrētu pielāgotu izņēmumu apstrādi un noteikšanu programmā C++.

#include
#iekļaut
izmantojot nosaukumvieta std ;

klasē DemoIzņēmums : publiski izņēmums
{
virtuāls konst char * kas ( ) konst mest ( )
{
atgriezties 'Noķerts pielāgots izņēmums' ;
}
} ;
starpt galvenais ( )
{
DemoException dEx ;
mēģināt
{
mest dEx ;
}
noķert ( izņēmums & izņemot )
{
cout << izņemot. kas ( ) << endl ;
}
atgriezties 0 ;
}

Mēs kodā definējam galvenes failu, ieskaitot “iostream” un “izņēmumu”. “iostream” ir īpaši izsaukta ievades un izvades straumei, savukārt “izņēmuma” bibliotēka tiek izsaukta, lai apstrādātu izņēmumu. Pēc tam mēs izveidojam klasi “DemoException”, kas ir atvasināta no C++ klases “izņēmuma”. Šeit mēs iestatām virtuālo what() funkciju, kas tiek izmantota, lai nodrošinātu const char*, kas parāda kļūdas ziņojuma rezultātus, kas ir saistīts ar izņēmumu.







Pēc tam mēs izsaucam galveno () funkciju, kurā izveidojam klases “DemoException” objektu “dEx”. Pēc tam mums ir “izmēģināt” bloka definīcija, kas rada izņēmumu, ja rodas. Šeit mēs iemetam objektu “dEx”.



Pēc tam mēs iestatām “noķeršanas” bloku, lai uztvertu izņēmumu un apstrādātu to. Mēs nododam atsauci uz klases izņēmumu kā parametru, lai uztvertu no tā atvasināto izņēmumu. Blokā “catch” mēs izsaucam what() funkciju “izņemot”, lai saņemtu izņēmuma ziņojumu konsolē.



Pēc dotās programmas izpildes pielāgotais izņēmuma ziņojums tiek noķerts un izmests konsolē:





2. piemērs: programma pielāgota izņēmuma izveidei, izmantojot divas klases

Programma uzsver, ka jārisina vairāki izņēmumi, kurus var apstrādāt neatkarīgi, definējot vairākas klases.



#include
izmantojot nosaukumvieta std ;

klasē novērtējums1 { } ;
klasē novērtējums2 { } ;

starpt galvenais ( ) {
mēģināt {
mest novērtējums1 ( ) ;
}
noķert ( novērtējums1 e ) {
cout << 'Novērtējums1 izņēmums Noķerts!' << endl ;
}
mēģināt {
mest novērtējums2 ( ) ;
}
noķert ( novērtējums2 e ) {
cout << 'Novērtējums 2 izņēmums Noķerts!' << endl ;
}

atgriezties 0 ;
}

Dotajā kodā mums ir divu klašu definīcija “Novērtējums1” un “Novērtējums2”, kuras tagad ir tukšas. Pēc tam mēs veicam programmas galveno () funkciju. Šeit mēs iestatām bloku try{}, kurā tiek izmantots atslēgvārds “mest”, lai izmestu klases “Evaluation1()” gadījumu. Tas nozīmē, ka izņēmums “Novērtējums1” tiek izmests, ja programmā šajā blokā “mēģināt” rodas kāds izņēmums. Pēc tam mums ir noķeršanas{} bloks, kurā tiek uztverts izņēmums un tiek parādīts izņēmuma ziņojums.

Tāpat mums ir definīcija citam try{} blokam klasei “Novērtējums2”. Šajā try{} blokā mēs ievietojam klases “Novērtējums2” gadījumu. Ja šeit rodas kļūda, tiek izslēgts “Novērtējums2” izņēmums. Pēc tam mēs izsaucam bloku catch{}, lai parādītu izņēmuma ziņojumu, izmantojot komandu “cout”, ja izņēmums ir noķerts šajā blokā.

Divi dažādu “try-catch” bloku izņēmumi tiek izmesti konsolē, kurus apstrādā divas dažādas klases.

3. piemērs: programma pielāgota izņēmuma izveidei, izmantojot Constructor

Programma izmanto konstruktoru, lai apstrādātu izņēmumu. Pat ja mēs nevaram iegūt vērtības no konstruktora, mēs to varam panākt, izmantojot bloku “try-catch”.

#include
izmantojot nosaukumvieta std ;

klasē Pārbaude {
starpt val ;

publiski :
Pārbaude ( starpt n )
{
mēģināt {
ja ( n == 0 )
val = n ;
displejs ( ) ;
}

noķert ( konst char * exp ) {
cout << 'Atrasts izņēmums \n ' ;
cout << exp << endl ;
}

}

nederīgs displejs ( )
{
cout << 'Vērtība =' << val << endl ;
}
} ;

starpt galvenais ( )
{

Pārbaude ( 0 ) ;
cout << 'Atkal tiek veidota instance \n ' ;
Pārbaude ( 1 ) ;
}

Dotajā kodā mēs izveidojam klasi “Test”, kurā mainīgais tiek deklarēts kā “val” ar veselu skaitļu tipu. Pēc tam mums ir konstruktora funkcijas “Test()” definīcija, kas tiek nodota ar mainīgo “n”. Pēc tam konstruktora funkcijā “Test()” iestatām bloku “try-catch”. Try bloks tiek izsaukts ar if() priekšrakstu. Ja “n” vērtība ir vienāda ar nulli, “catch” bloks uztvers izņēmumu, un uzvednē tiks parādīts izņēmuma ziņojums. Vērtība “n” tiek saglabāta mainīgajā “val”, to inicializējot.

Pēc tam mēs izsaucam funkciju display(), lai parādītu vērtību, kas tiek saglabāta mainīgajā “val”. Tālāk mums ir “noķeršanas” bloka definīcija, kurā tiek apstrādāts “izmēģināšanas” bloka izmestais izņēmums. Visbeidzot, mēs izsaucam galveno () funkciju. Kurā mēs saucam konstruktoru “Test()”. Konstruktors tiek iedarbināts, kad tiek izveidots klases “Test()” objekts un norādīts ar vērtību “0”, uz kuru attiecas izņēmums.

Pēc tam mēs vēlreiz izsaucam klasi “Test()”, lai izveidotu instanci, kas tiek nodota ar vērtību 1. Šeit konstruktors neizdos nekādu izņēmumu, jo vērtība nav vienāda ar 0. Funkcija display() izpildiet un izdrukājiet “val” vērtību.

Pielāgotais izņēmums tiek izmests konsolē, izsaucot konstruktoru. Turklāt, ja nosacījums ir izpildīts, konstruktors izpilda bez izņēmuma.

4. piemērs. Programma lietotāja definēta pielāgota izņēmuma izveidei

Programma šeit apstrādā un uztver izņēmumu, ko definējis lietotājs, kad tas tiek prasīts uzvednē.

#include
#iekļaut
izmantojot nosaukumvieta std ;
klasē MyDemo : publiski izņēmums {
publiski :
konst char * kas ( ) konst mest ( )
{
atgriezties 'Izņēmums! Mēģināja dalīt ar nulli.! \n ' ;
}
} ;
starpt galvenais ( )
{
mēģināt
{
starpt n1, n2 ;
cout << 'Ievadiet divus veselus skaitļus: \n ' ;
ēšana >> n1 >> n2 ;
ja ( n2 == 0 )
{
MyDemo n3 ;
mest n3 ;
}
cits
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
noķert ( izņēmums & izņemot )
{
cout << izņemot kas ( ) ;
}
}

Dotajā kodā mēs vispirms definējam klasi “MyDemo()”, kas ir izņēmuma atkarīgā klase. Pēc tam mēs iestatījām publisko what() funkciju ar atslēgvārdu “virtuāls”. Funkcija what() tiek izsaukta, lai programmā iegūtu izņēmuma cēloni, kad funkcija throw () izmet izņēmumu. Pēc tam mums ir funkcija main(), kurā tiek definēti try-catch{} bloki, lai noteiktu un apstrādātu izņēmumu. Blokā try{} mēs deklarējam divus mainīgos “n1” un “n2”, kuru vērtības tiek ņemtas no lietotāja, izmantojot komandu “cin”. Kad tiek saņemtas vērtības pret katru “n1” un “n2” mainīgo, nosacījums “if” pārbaudīs, vai mainīgais “n2” ir vienāds ar 0 vai nē. Ja tā, tad tiek izdarīts izņēmums vai tiek atgriezti dalīšanas rezultāti. Visbeidzot, mums ir nozvejas{} bloks, kas atsauci uz klasi “izņēmums” izmanto kā no tā mantotu parametru.

Izvade parāda, kad nosacījums nav izpildīts un programma tiek izpildīta bez izņēmuma:

Mēs arī definējam vērtību “0” mainīgajam “n2”, lai parādītu, kā izņēmums tiek izmests un uztverts programmā.

Secinājums

Noslēgumā mēs parādījām svarīgo C++ jēdzienu, kas ir izņēmums. Izņēmums kavē programmas regulāru izpildi. Šim nolūkam mēs izmantojām atslēgvārdus “mest”, “mēģināt” un “noķert”, lai apstrādātu izņēmumu, kas notiek programmā. Mēs izmantojām šos atslēgvārdus iepriekšējos piemēros, lai izņēmumu apstrādātu atšķirīgi.