C++ mukautetut poikkeukset

C Mukautetut Poikkeukset



Poikkeus C++:ssa on ydinkäsite. Poikkeus tapahtuu suoritusaikana, kun ohjelma kohtaa ajonaikaisia ​​epäjohdonmukaisuuksia tai epätavallisia skenaarioita. C++:ssa termejä 'heittää', 'yrittää' ja 'saappaa' käytetään poikkeuksen käsittelemiseen tai kiinni saamiseen. 'Heitä'-komentoa käytetään poikkeuksen luomiseen. 'Yritä'-termi toimii poikkeuksen heittämiseen, ja 'catch'-avainsana edustaa poikkeuksen käsittelyä, joka on kehitetty 'heittä'-termillä ja jonka heittää 'yritä'-osio. Sukellaanpa esimerkkeihin osoittaaksemme poikkeukset C++:ssa.

Esimerkki 1: Ohjelma luomaan mukautetun poikkeusluokan C++:ssa

Tämä yksinkertainen esimerkki on toteutettu havainnollistamaan mukautettua poikkeusten käsittelyä ja havaitsemista C++:ssa.

#include
#sisällytä
käyttämällä nimiavaruus std ;

luokkaa DemoException : julkinen poikkeus
{
virtuaalinen konst hiiltyä * mitä ( ) konst heittää ( )
{
palata 'Kiinnitetty mukautettu poikkeus' ;
}
} ;
int pää ( )
{
DemoException dEx ;
yrittää
{
heittää dEx ;
}
ottaa kiinni ( poikkeus & paitsi )
{
cout << paitsi. mitä ( ) << endl ;
}
palata 0 ;
}

Määrittelemme koodissa otsikkotiedoston, mukaan lukien 'iostream' ja 'poikkeus'. 'iostream' on nimenomaan kutsuttu tulo- ja lähtövirtaa varten, kun taas 'poikkeus'-kirjasto kutsutaan käsittelemään poikkeusta. Tämän jälkeen luomme 'DemoException'-luokan, joka on johdettu C++:n 'poikkeus'-luokasta. Tässä asetetaan virtuaalinen what()-funktio, jota käytetään antamaan const char*, joka näyttää poikkeukseen linkitetyn virheilmoituksen tulokset.







Sitten kutsumme main()-funktion, jossa luomme 'DemoException'-luokan 'dEx'-objektin. Sen jälkeen meillä on 'try'-lohkomäärittely, joka heittää poikkeuksen, jos se kohtaa. Täällä heitetään 'dEx' -objekti.



Seuraavaksi asetamme 'catch' -lohkon poikkeuksen kiinni saamiseksi ja käsittelemään sitä. Välitämme luokkapoikkeuksen viittauksen parametriksi, joka saa kiinni siitä johdetun poikkeuksen. 'Catch'-lohkon sisällä kutsumme what()-funktiota 'paitsi' saadaksemme poikkeusviestin konsoliin.



Annetun ohjelman suorittamisen jälkeen mukautettu poikkeussanoma jää kiinni ja heitetään konsoliin:





Esimerkki 2: Ohjelma luomaan mukautetun poikkeuksen käyttämällä kahta luokkaa

Ohjelma korostaa useiden poikkeusten käsittelyä, joita voidaan käsitellä itsenäisesti määrittämällä useita luokkia.



#include
käyttämällä nimiavaruus std ;

luokkaa arviointi1 { } ;
luokkaa arviointi2 { } ;

int pää ( ) {
yrittää {
heittää arviointi1 ( ) ;
}
ottaa kiinni ( arviointi1 e ) {
cout << 'Evaluation1 poikkeus kiinni!' << endl ;
}
yrittää {
heittää arviointi2 ( ) ;
}
ottaa kiinni ( arviointi2 e ) {
cout << 'Arvioinnin 2 poikkeus kiinni!' << endl ;
}

palata 0 ;
}

Annetussa koodissa meillä on kahden luokan määritelmä, 'Arviointi1' ja 'Arviointi2', jotka ovat nyt tyhjiä. Tämän jälkeen suoritamme ohjelman main()-funktion. Tässä asetamme try{}-lohkon, jossa 'heittä'-avainsanaa käytetään heittämään 'Evaluation1()'-luokan esiintymä. Tämä tarkoittaa, että 'Evaluation1'-poikkeus heitetään, jos ohjelmassa ilmenee poikkeus tässä 'try'-lohkossa. Sen jälkeen meillä on catch{}-lohko, johon poikkeus jää kiinni ja joka näyttää poikkeuksen viestin.

Samalla tavalla meillä on määritelmä toiselle try{}-lohkolle 'Arviointi2'-luokassa. Tuo try{}-lohkon sisään heitämme 'Evaluation2'-luokan esiintymän. Tämä tekee poikkeuksen 'Evaluation2':sta, jos tässä tapahtuu virhe. Sitten kutsumme catch{}-lohkon näyttämään poikkeusviestin käyttämällä 'cout'-komentoa, jos poikkeus on kiinni tämän lohkon sisällä.

Kaksi poikkeusta eri 'try-catch' -lohkoista heitetään konsoliin, joita käsittelevät kaksi eri luokkaa.

Esimerkki 3: Ohjelma luomaan mukautetun poikkeuksen Constructorilla

Ohjelma käyttää konstruktoria poikkeuksen käsittelyyn. Vaikka emme saa arvoja rakentajalta, voimme saavuttaa tämän käyttämällä 'try-catch' -lohkoa.

#include
käyttämällä nimiavaruus std ;

luokkaa Testata {
int val ;

julkinen :
Testata ( int n )
{
yrittää {
jos ( n == 0 )
val = n ;
näyttö ( ) ;
}

ottaa kiinni ( konst hiiltyä * exp ) {
cout << 'Poikkeus löytyi \n ' ;
cout << exp << endl ;
}

}

mitätön näyttö ( )
{
cout << 'Arvo =' << val << endl ;
}
} ;

int pää ( )
{

Testata ( 0 ) ;
cout << 'Luodaan instanssia uudelleen \n ' ;
Testata ( 1 ) ;
}

Määritämme annetussa koodissa 'Test'-luokan, jossa muuttuja ilmoitetaan 'val'-tyyppisenä kokonaislukuna. Sitten meillä on määritelmä 'Test()' -konstruktorifunktiolle, joka välitetään 'n'-muuttujan kanssa. Sitten asetamme 'try-catch' -lohkon 'Test()' -konstruktorifunktioon. Try-lohkoa kutsutaan if()-käskyllä. Jos n:n arvo on nolla, 'catch' -lohko saa kiinni poikkeuksen ja poikkeusviesti heitetään kehotteeseen. Arvo 'n' tallennetaan 'val'-muuttujaan, kun alustamme sen.

Tämän jälkeen kutsumme display()-funktiota näyttämään 'val'-muuttujaan tallennetun arvon. Seuraavaksi meillä on 'catch'-lohkon määritelmä, jossa käsitellään 'try'-lohkon heittämä poikkeus. Lopuksi kutsumme main()-funktion. Sen sisällä kutsumme 'Test()'-konstruktoriksi. Konstruktori laukeaa, kun 'Test()'-luokan objekti luodaan ja määritetään arvolla '0', jolle poikkeus heitetään.

Tämän jälkeen kutsumme uudelleen 'Test()'-luokkaa luodaksemme ilmentymän, joka välitetään arvolla 1. Tässä rakentaja ei anna mitään poikkeusta, koska arvo ei ole yhtä suuri kuin 0. Display()-funktio suorita ja tulosta ”val”-arvo.

Mukautettu poikkeus heitetään konsoliin kutsumalla rakentaja. Lisäksi kun ehto täyttyy, konstruktori suorittaa poikkeuksetta.

Esimerkki 4: Ohjelma luomaan käyttäjän määrittämän mukautetun poikkeuksen

Tässä oleva ohjelma käsittelee ja ottaa kiinni käyttäjän määrittämän poikkeuksen, kun sitä kysytään kehotteessa.

#include
#sisällytä
käyttämällä nimiavaruus std ;
luokkaa MyDemo : julkinen poikkeus {
julkinen :
konst hiiltyä * mitä ( ) konst heittää ( )
{
palata 'Poikkeus! Yritettiin jakaa nollalla.! \n ' ;
}
} ;
int pää ( )
{
yrittää
{
int n1, n2 ;
cout << 'Syötä kaksi kokonaislukua: \n ' ;
syöminen >> n1 >> n2 ;
jos ( n2 == 0 )
{
MyDemo n3 ;
heittää n3 ;
}
muu
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
ottaa kiinni ( poikkeus & exc )
{
cout << exc. mitä ( ) ;
}
}

Määritämme annetussa koodissa ensin 'MyDemo()'-luokan, joka on poikkeuksen riippuvainen luokka. Sen jälkeen asetimme julkisen what()-funktion 'virtuaali'-avainsanalla. Mitä()-funktio kutsutaan hakemaan poikkeuksen syy ohjelmassa, kun throw()-funktio heittää poikkeuksen. Sitten meillä on main()-funktio, jossa try-catch{}-lohkot määritellään poikkeuksen havaitsemiseksi ja käsittelemiseksi. Try{}-lohkossa määritetään kaksi muuttujaa, 'n1' ja 'n2', joiden arvot otetaan käyttäjältä 'cin'-komennolla. Kun arvot kutakin 'n1' ja 'n2' muuttujaa vastaan ​​vastaanotetaan, 'jos'-ehto tarkistaa, onko 'n2' muuttuja yhtä suuri kuin 0 vai ei. Jos näin on, tehdään poikkeus tai jakotulokset palautetaan. Lopuksi meillä on catch{}-lohko, joka ottaa 'poikkeus'-luokan viittauksen siitä perittynä parametrina.

Tulos näyttää, kun ehto ei täyty ja ohjelma suoritetaan poikkeuksetta:

Lisäksi määritämme arvon '0' muuttujalle 'n2' kuvaamaan, kuinka poikkeus heitetään ja pyydetään ohjelmassa.

Johtopäätös

Lopuksi osoitimme tärkeän C++:n käsitteen, joka on poikkeus. Poikkeus haittaa ohjelman säännöllistä suorittamista. Tätä varten käytimme 'heittä', 'kokeile' ja 'saappaa' avainsanoja käsitelläksemme ohjelmassa tapahtuvan poikkeuksen. Käytimme näitä avainsanoja aiemmissa esimerkeissä poikkeuksen käsittelyyn eri tavalla.