C++ kohandatud erandid

C Kohandatud Erandid



C++ erand on põhikontseptsioon. Erand ilmneb täitmisajal, kui programm kohtab käitusaegseid vastuolusid või ebatavalisi stsenaariume. Keeles C++ kasutatakse erandi käsitlemiseks või püüdmiseks termineid 'viska', 'proovi' ja 'püüda'. Erandi loomiseks kasutatakse käsku 'viska'. Mõiste 'proovi' on mõeldud erandi loomiseks ja märksõna 'püüda' tähistab erandi käsitlemist, mis on välja töötatud terminiga 'viska' ja mille viskab jaotis 'proovi'. Sukeldume mõne näitega, et demonstreerida C++ erandeid.

Näide 1: Programm kohandatud erandiklassi loomiseks C++ keeles

See lihtne näide on rakendatud C++ kohandatud erandite käsitlemise ja tuvastamise demonstreerimiseks.

#include
#kaasa
kasutades nimeruum std ;

klass DemoErand : avalik erand
{
virtuaalne konst char * mida ( ) konst viskama ( )
{
tagasi 'Püütud kohandatud erand' ;
}
} ;
int peamine ( )
{
DemoErand dEx ;
proovige
{
viskama dEx ;
}
püüda ( erand & välja arvatud )
{
cout << välja arvatud. mida ( ) << endl ;
}
tagasi 0 ;
}

Määratleme koodis päisefaili, sealhulgas 'iostream' ja 'erand'. 'iostream' on spetsiaalselt kutsutud sisend- ja väljundvoo jaoks, samas kui erandi käsitlemiseks kutsutakse välja 'erand' teek. Pärast seda loome klassi 'DemoException', mis on tuletatud C++ klassist 'erand'. Siin määrame virtuaalse what() funktsiooni, mida kasutatakse const char* esitamiseks, mis kuvab erandiga lingitud veateate tulemused.







Seejärel käivitame funktsiooni main(), kus loome klassi 'DemoException' objekti 'dEx'. Pärast seda on meil 'proovi' ploki määratlus, mis tekitab erandi, kui see ilmneb. Siin viskame objekti 'dEx'.



Järgmisena seadsime erandi tabamiseks ja sellega tegelemiseks ploki 'püük'. Edastame klassi erandi viite parameetrina, et püüda kinni sellest tuletatud erand. Plokis “catch” kutsume välja “välja arvatud” funktsiooni what(), et saada konsooli eranditeade.



Pärast antud programmi käivitamist püütakse kohandatud erandi teade kinni ja visatakse konsooli:





Näide 2: Programm kahe klassi abil kohandatud erandi loomiseks

Programm rõhutab mitmete erandite käsitlemist, mida saab iseseisvalt käsitleda, määratledes mitu klassi.



#include
kasutades nimeruum std ;

klass hindamine1 { } ;
klass hindamine2 { } ;

int peamine ( ) {
proovige {
viskama hindamine1 ( ) ;
}
püüda ( hindamine1 e ) {
cout << 'Evaluation1 erand tabatud!' << endl ;
}
proovige {
viskama hindamine2 ( ) ;
}
püüda ( hindamine2 e ) {
cout << 'Hindamise 2 erand tabatud!' << endl ;
}

tagasi 0 ;
}

Antud koodis on meil kahe klassi definitsioon “Hindamine1” ja “Hindamine2”, mis on nüüd tühjad. Pärast seda teostame programmi peamise () funktsiooni. Siin määrame proovi{} ploki, kus märksõna 'viska' kasutatakse klassi 'Evaluation1()' eksemplari viskamiseks. See tähendab, et erand 'Evaluation1' visatakse, kui programmis selles 'proovimise' plokis ilmneb mõni erand. Pärast seda on meil plokk catch{}, kus erand püütakse kinni ja kuvatakse erandi teade.

Samamoodi on meil klassi „Evaluation2” jaoks veel ühe try{} ploki definitsioon. Selle try{} ploki sisse viskame klassi „Evaluation2” eksemplari. Kui siin ilmneb tõrge, jääb see „Evaluation2” erandiks. Seejärel kutsume välja catch{} ploki, et kuvada erandi teade, kasutades käsku 'cout', kui erand on selle ploki sees kinni.

Kaks erandit erinevatest 'try-catch' plokkidest visatakse konsooli, mida haldavad kaks erinevat klassi.

Näide 3: Programm Constructoriga kohandatud erandi loomiseks

Programm kasutab erandi käsitlemiseks konstruktorit. Kuigi me ei saa konstruktorilt väärtusi hankida, saame selle saavutada 'try-catch' ploki abil.

#include
kasutades nimeruum std ;

klass Test {
int val ;

avalik :
Test ( int n )
{
proovige {
kui ( n == 0 )
val = n ;
kuva ( ) ;
}

püüda ( konst char * eksp ) {
cout << 'Leitud erand \n ' ;
cout << eksp << endl ;
}

}

tühine kuva ( )
{
cout << 'Väärtus =' << val << endl ;
}
} ;

int peamine ( )
{

Test ( 0 ) ;
cout << 'Uuesti eksemplari loomine \n ' ;
Test ( 1 ) ;
}

Antud koodis loome klassi 'Test', kus muutuja deklareeritakse täisarvu tüüpi 'val'. Seejärel on meil konstruktorifunktsiooni 'Test()' määratlus, mis edastatakse muutujaga 'n'. Seejärel määrasime konstruktorifunktsiooni 'Test()' ploki 'try-catch'. Try-plokki kutsutakse if()-lausega. Kui n väärtus võrdub nulliga, püüab 'catch' plokk erandi kinni ja erandi teade visatakse viipale. 'n' väärtus salvestatakse muutujas 'val', kui me selle lähtestame.

Pärast seda kutsume välja funktsiooni display(), et näidata väärtust, mis on salvestatud muutujasse 'val'. Järgmisena on meil 'püüdmise' ploki definitsioon, kus käsitletakse 'proovi' ploki poolt tekitatud erandit. Lõpuks kutsume esile funktsiooni main(). Mille sees kutsume konstruktorit 'Test()'. Konstruktor käivitub, kui luuakse klassi 'Test()' objekt ja see määratakse väärtusega '0', millele erand tehakse.

Pärast seda kutsume uuesti klassi 'Test()', et luua eksemplar, mis edastatakse väärtusega 1. Siin ei tee konstruktor ühtegi erandit, kuna väärtus ei ole 0-ga. Funktsioon display() käivitage ja printige „val” väärtus.

Kohandatud erand visatakse konsoolile, kutsudes konstruktorit. Samuti, kui tingimus on täidetud, teostab konstruktor ilma eranditeta.

Näide 4: Programm kasutaja määratud kohandatud erandi loomiseks

Siinne programm käsitleb ja püüab kinni erandi, mille kasutaja määrab, kui seda küsitakse.

#include
#kaasa
kasutades nimeruum std ;
klass MinuDemo : avalik erand {
avalik :
konst char * mida ( ) konst viskama ( )
{
tagasi 'Erand! Proovisin nulliga jagada.! \n ' ;
}
} ;
int peamine ( )
{
proovige
{
int n1, n2 ;
cout << 'Sisestage kaks täisarvu: \n ' ;
söömine >> n1 >> n2 ;
kui ( n2 == 0 )
{
MyDemo n3 ;
viskama n3 ;
}
muidu
{
cout << 'n1/n2 =' << n1 / n2 << endl ;
}
}
püüda ( erand & va )
{
cout << va. mida ( ) ;
}
}

Antud koodis määratleme esmalt klassi “MyDemo()”, mis on erandi sõltuv klass. Pärast seda määrame avaliku what() funktsiooni märksõnaga 'virtuaalne'. Funktsioon what() kutsutakse välja, et saada programmis välja erandi põhjus, kui funktsioon throw() erandit viskab. Seejärel on meil funktsioon main(), kus try-catch{} plokid on määratletud erandi tuvastamiseks ja käsitlemiseks. Plokis try{} deklareerime kaks muutujat “n1” ja “n2”, mille väärtused võetakse kasutajalt käsuga “cin”. Kui iga muutuja 'n1' ja 'n2' väärtused on vastu võetud, kontrollib tingimus 'if', kas muutuja 'n2' on 0 või mitte. Kui jah, siis tehakse erand või tagastatakse jagamise tulemused. Lõpuks on meil plokk catch{}, mis võtab klassi “erand” viite sellelt päritud parameetrina.

Väljund näitab, kui tingimus on täitmata ja programm käivitatakse ilma eranditeta:

Samuti määratleme muutuja 'n2' väärtuse '0', et näidata, kuidas erand tehakse ja programmis kinni püütakse.

Järeldus

Kokkuvõtteks demonstreerisime olulist C++ kontseptsiooni, mis on erand. Erand takistab programmi regulaarset täitmist. Selleks kasutasime programmis toimuva erandi käsitlemiseks märksõnu „viska”, „proovi” ja „püüda”. Kasutasime neid märksõnu eelmistes näidetes, et erandit erinevalt käsitleda.