C++ tinkintos išimtys

C Tinkintos Isimtys



Išimtis C++ yra pagrindinė sąvoka. Vykdymo laikui taikoma išimtis, kai programa susiduria su vykdymo laiko neatitikimais arba neįprastais scenarijais. C++ kalboje terminai „mesti“, „bandyti“ ir „pagauti“ naudojami išimtims valdyti arba sugauti. Išimčiai generuoti naudojama komanda „mesti“. Terminas „bandyti“ yra skirtas išimtis išmesti, o raktinis žodis „pagauti“ reiškia išimties, kuri yra sukurta naudojant terminą „mesk“ ir įvedama skyriuje „bandyti“, tvarkymą. Pasinerkime į keletą pavyzdžių, kad parodytume C++ išimtis.

1 pavyzdys: programa, skirta sukurti pasirinktinę išimties klasę C++

Šis paprastas pavyzdys yra įgyvendintas norint parodyti pasirinktinį išimčių tvarkymą ir aptikimą C++.

#include
#įtraukti
naudojant vardų erdvė std ;

klasė DemoException : viešas išimtis
{
virtualus konst char * ( ) konst mesti ( )
{
grąžinti „Pagauta individualizuota išimtis“ ;
}
} ;
tarpt pagrindinis ( )
{
DemoException dEx ;
bandyti
{
mesti dEx ;
}
sugauti ( išimtis & išskyrus )
{
cout << išskyrus. ( ) << endl ;
}
grąžinti 0 ;
}

Kode apibrėžiame antraštės failą, įskaitant „iostream“ ir „išimtį“. „iostream“ yra specialiai iškviestas įvesties ir išvesties srautui, o „išimties“ biblioteka iškviečiama išimtims apdoroti. Po to sukuriame „DemoException“ klasę, kuri yra kilusi iš C++ „išimties“ klasės. Čia nustatome virtualiąją what() funkciją, kuri naudojama pateikti const char*, kuri rodo klaidos pranešimo, susieto su išimtimi, rezultatus.







Tada iškviečiame funkciją main(), kur sukuriame „DemoException“ klasės objektą „dEx“. Po to turime „bandyti“ bloko apibrėžimą, kuris, jei pasitaiko, išmeta išimtį. Čia mes įmetame objektą „dEx“.



Tada nustatome bloką „pagauti“, kad gautume išimtį ir su ja susitvarkytume. Klasės išimties nuorodą perduodame kaip parametrą, kad gautume iš jos gautą išimtį. Bloke „catch“ iškviečiame funkciją what () „išskyrus“, kad gautume išimties pranešimą konsolėje.



Įvykdžius nurodytą programą, tinkintos išimties pranešimas pagaunamas ir metamas į konsolę:





2 pavyzdys: Programa sukurti pasirinktinę išimtį naudojant dvi klases

Programa pabrėžia, kad reikia spręsti kelias išimtis, kurias galima tvarkyti savarankiškai, apibrėžiant kelias klases.



#include
naudojant vardų erdvė std ;

klasė įvertinimas1 { } ;
klasė įvertinimas2 { } ;

tarpt pagrindinis ( ) {
bandyti {
mesti įvertinimas1 ( ) ;
}
sugauti ( įvertinimas1 e ) {
cout << '1 įvertinimo išimtis Pagauta!' << endl ;
}
bandyti {
mesti įvertinimas2 ( ) ;
}
sugauti ( įvertinimas2 e ) {
cout << '2 įvertinimo išimtis Pagauta!' << endl ;
}

grąžinti 0 ;
}

Pateiktame kode turime dviejų klasių „Evaluation1“ ir „Evaluation2“ apibrėžimą, kurios dabar tuščios. Po to mes atliekame programos pagrindinę () funkciją. Čia nustatome try{} bloką, kuriame raktinis žodis „mesti“ naudojamas „Evaluation1()“ klasės egzemplioriui mesti. Tai reiškia, kad „Evaluation1“ išimtis išmetama, jei programoje atsiranda kokia nors išimtis šiame „bandymo“ bloke. Po to turime gaudymo{} bloką, kuriame užfiksuojama išimtis ir rodomas išimties pranešimas.

Panašiai turime ir kito try{} bloko apibrėžimą, skirtą „Evaluation2“ klasei. Į tą try{} bloką įmetame „Evaluation2“ klasės egzempliorių. Tai padarys „Evaluation2“ išimtį, jei čia įvyktų klaida. Tada iškviečiame bloką catch{}, kad būtų rodomas išimties pranešimas, naudojant komandą „cout“, jei išimtis užfiksuota šiame bloke.

Dvi skirtingų „try-catch“ blokų išimtys įmetamos į konsolę, kurią tvarko dvi skirtingos klasės.

3 pavyzdys: Programa, skirta sukurti pasirinktinę išimtį su Constructor

Išimčiai tvarkyti programa naudoja konstruktorių. Net jei negalime gauti reikšmių iš konstruktoriaus, galime tai pasiekti naudodami bloką „try-catch“.

#include
naudojant vardų erdvė std ;

klasė Testas {
tarpt val ;

viešas :
Testas ( tarpt n )
{
bandyti {
jeigu ( n == 0 )
val = n ;
ekranas ( ) ;
}

sugauti ( konst char * exp ) {
cout << „Rasta išimtis \n ;
cout << exp << endl ;
}

}

tuštuma ekranas ( )
{
cout << 'Vertė =' << val << endl ;
}
} ;

tarpt pagrindinis ( )
{

Testas ( 0 ) ;
cout << „Ir vėl kuriamas pavyzdys \n ;
Testas ( 1 ) ;
}

Pateiktame kode sukuriame „Test“ klasę, kurioje kintamasis deklaruojamas kaip „val“ tipo sveikasis skaičius. Tada turime konstruktoriaus funkcijos „Test()“ apibrėžimą, kuri perduodama su „n“ kintamuoju. Tada konstruktoriaus funkcijoje „Test()“ nustatome bloką „try-catch“. Bandymo blokas iškviečiamas su if() sakiniu. Jei „n“ reikšmė lygi nuliui, blokas „catch“ užfiksuos išimtį, o išimties pranešimas bus rodomas raginime. „n“ reikšmė saugoma „val“ kintamajame, kai ją inicijuojame.

Po to iškviečiame funkciją display(), kad parodytume reikšmę, saugomą kintamajame „val“. Toliau apibrėžiame bloko „pagauti“ apibrėžimą, kuriame apdorojama „bandymo“ bloko išmesta išimtis. Galiausiai iškviečiame pagrindinę () funkciją. Kurio viduje mes vadiname „Test()“ konstruktorių. Konstruktorius suaktyvinamas, kai sukuriamas „Test()“ klasės objektas ir nurodoma „0“ reikšmė, kuriai taikoma išimtis.

Po to dar kartą iškviečiame klasę „Test()“, kad sukurtume egzempliorių, kuris perduodamas reikšme 1. Čia konstruktorius nepadarys jokios išimties, nes reikšmė nėra lygi 0. Funkcija display() paleiskite ir išspausdinkite „val“ reikšmę.

Pasirinktinė išimtis konsolėje metama iškvietus konstruktorių. Taip pat, kai sąlyga įvykdoma, konstruktorius vykdo be jokių išimčių.

4 pavyzdys: Programa sukurti vartotojo nustatytą pasirinktinę išimtį

Programa čia apdoroja ir sugauna išimtį, kurią apibrėžia vartotojas, kai to prašo raginime.

#include
#įtraukti
naudojant vardų erdvė std ;
klasė „MyDemo“. : viešas išimtis {
viešas :
konst char * ( ) konst mesti ( )
{
grąžinti 'Išimtis! Bandžiau padalyti iš nulio.! \n ;
}
} ;
tarpt pagrindinis ( )
{
bandyti
{
tarpt n1, n2 ;
cout << 'Įveskite du sveikuosius skaičius: \n ;
valgymas >> n1 >> n2 ;
jeigu ( n2 == 0 )
{
MyDemo n3 ;
mesti n3 ;
}
Kitas
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
sugauti ( išimtis & išskyrus )
{
cout << išskyrus ( ) ;
}
}

Pateiktame kode pirmiausia apibrėžiame „MyDemo()“ klasę, kuri yra priklausoma išimties klasė. Po to mes nustatome viešąją what() funkciją naudodami raktinį žodį „virtualus“. Funkcija what() iškviečiama norint gauti programos išimties priežastį, kai funkcija throw() meta išimtį. Tada turime main() funkciją, kurioje apibrėžiami try-catch{} blokai, skirti aptikti ir apdoroti išimtį. Try{} bloke deklaruojame du kintamuosius „n1“ ir „n2“, kurių reikšmės paimtos iš vartotojo naudojant komandą „cin“. Kai gaunamos kiekvieno „n1“ ir „n2“ kintamojo reikšmės, sąlyga „if“ patikrins, ar „n2“ kintamasis yra lygus 0, ar ne. Jei taip, daroma išimtis arba grąžinami padalijimo rezultatai. Galiausiai turime bloką Catch{}, kuris kaip iš jos paveldėtą parametrą priima „išimties“ klasės nuorodą.

Išvestis rodo, kai sąlyga netenkinama ir programa vykdoma be išimties:

Be to, mes apibrėžiame „0“ reikšmę kintamajam „n2“, kad parodytume, kaip išimtis įvedama ir užfiksuota programoje.

Išvada

Apibendrinant, mes parodėme svarbią C++ koncepciją, kuri yra išimtis. Išimtis trukdo reguliariai vykdyti programą. Tam naudojome raktinius žodžius „išmesti“, „bandyti“ ir „pagauti“, kad galėtume tvarkyti programoje pasitaikančias išimtis. Ankstesniuose pavyzdžiuose naudojome šiuos raktinius žodžius, kad išimtį tvarkytume kitaip.