Izjeme po meri C++

Izjeme Po Meri C



Izjema v C++ je ključni koncept. Izjema se zgodi v času izvajanja, ko program naleti na nedoslednosti med izvajanjem ali nenavadne scenarije. V C++ se izrazi 'vrzi', 'poskusi' in 'ulovi' uporabljajo za obravnavanje ali lovljenje izjeme. Za ustvarjanje izjeme se uporablja ukaz »throw«. Izraz »poskusi« služi vrženju izjeme, ključna beseda »catch« pa predstavlja obravnavanje izjeme, ki je razvita z izrazom »vrzi« in jo vrže razdelek »poskusi«. Poglobimo se v nekaj primerov, da pokažemo izjeme v C++.

Primer 1: Program za ustvarjanje razreda izjem po meri v C++

Ta preprost primer je implementiran za predstavitev obravnave in odkrivanja izjem po meri v C++.

#include
#include
uporabo imenski prostor std ;

razred DemoException : javnosti izjema
{
virtualni konst char * kaj ( ) konst metati ( )
{
vrnitev 'Ujeta izjema po meri' ;
}
} ;
int glavni ( )
{
DemoException dEx ;
poskusi
{
metati dEx ;
}
ulov ( izjema & razen )
{
cout << razen. kaj ( ) << konec ;
}
vrnitev 0 ;
}

V kodi definiramo datoteko glave, vključno z »iostream« in »exception«. »iostream« je posebej poklican za vhodni in izhodni tok, medtem ko je knjižnica »exception« priklicana za obravnavanje izjeme. Po tem ustvarimo razred »DemoException«, ki je izpeljan iz razreda »exception« C++. Tukaj nastavimo navidezno funkcijo what(), ki se uporablja za zagotavljanje const char*, ki prikaže rezultate sporočila o napaki, ki je povezano z izjemo.







Nato pokličemo funkcijo main(), kjer ustvarimo objekt 'dEx' razreda 'DemoException'. Po tem imamo definicijo bloka »poskusi«, ki vrže izjemo, če nanjo naleti. Tukaj vržemo predmet 'dEx'.



Nato nastavimo blok »catch«, da ujame izjemo in jo obravnava. Referenco izjeme razreda posredujemo kot parameter, da ujamemo izjemo, ki izhaja iz nje. Znotraj bloka »catch« pokličemo funkcijo what() na »except«, da dobimo sporočilo o izjemi na konzoli.



Po izvedbi podanega programa se sporočilo o izjemi po meri ujame in vrže na konzolo:





Primer 2: Program za ustvarjanje izjeme po meri z uporabo dveh razredov

Program poudarja obravnavanje več izjem, ki jih je mogoče obravnavati neodvisno z definiranjem več razredov.



#include
uporabo imenski prostor std ;

razred ocena1 { } ;
razred vrednotenje2 { } ;

int glavni ( ) {
poskusi {
metati ocena1 ( ) ;
}
ulov ( vrednotenje1 e ) {
cout << 'Izjema Evaluation1 Caught!' << konec ;
}
poskusi {
metati vrednotenje2 ( ) ;
}
ulov ( vrednotenje2 e ) {
cout << 'Ujeta izjema ocene 2!' << konec ;
}

vrnitev 0 ;
}

V dani kodi imamo definicijo dveh razredov, »Evaluation1« in »Evaluation2«, ki sta zdaj prazna. Po tem izvedemo programsko funkcijo main(). Tukaj smo nastavili blok try{}, kjer se ključna beseda »throw« uporablja za vrzanje primerka razreda »Evaluation1()«. To pomeni, da se vrže izjema »Evaluation1«, če se v programu znotraj tega bloka »poskusi« pojavi kakšna izjema. Po tem imamo blok catch{}, kjer se izjema ujame in prikaže sporočilo o izjemi.

Podobno imamo definicijo drugega bloka try{} za razred »Evaluation2«. Znotraj tega bloka try{} vržemo primerek razreda »Evaluation2«. To vrže izjemo »Evaluation2«, če se tukaj pojavi napaka. Nato pokličemo blok catch{}, da prikažemo sporočilo o izjemi z ukazom »cout«, če je izjema ujeta v tem bloku.

Dve izjemi različnih blokov »poskusi-ulovi« sta vrženi v konzolo, ki ju obravnavata dva različna razreda.

Primer 3: Program za ustvarjanje izjeme po meri s konstruktorjem

Program uporablja konstruktor za obravnavanje izjeme. Čeprav ne moremo pridobiti vrednosti iz konstruktorja, lahko to dosežemo z uporabo bloka “try-catch”.

#include
uporabo imenski prostor std ;

razred Test {
int val ;

javnosti :
Test ( int n )
{
poskusi {
če ( n == 0 )
val = n ;
zaslon ( ) ;
}

ulov ( konst char * exp ) {
cout << 'Najdena izjema \n ' ;
cout << exp << konec ;
}

}

praznina zaslon ( )
{
cout << 'Vrednost = ' << val << konec ;
}
} ;

int glavni ( )
{

Test ( 0 ) ;
cout << »Ponovno ustvarjanje primerka \n ' ;
Test ( 1 ) ;
}

V podani kodi vzpostavimo razred »Test«, kjer je spremenljivka deklarirana kot »val« tipa integer. Nato imamo definicijo funkcije konstruktorja »Test()«, ki se posreduje s spremenljivko »n«. Nato nastavimo blok »try-catch« znotraj funkcije konstruktorja »Test()«. Blok poskusa se pokliče s stavkom if(). Če je vrednost 'n' enaka nič, bo blok 'catch' ujel izjemo in sporočilo o izjemi bo vrženo na poziv. Vrednost 'n' je shranjena v spremenljivki 'val', ko jo inicializiramo.

Po tem pokličemo funkcijo display(), da prikažemo vrednost, ki je shranjena v spremenljivki »val«. Nato imamo definicijo bloka »catch«, kjer se obravnava izjema, ki jo vrže blok »try«. Nazadnje pokličemo funkcijo main(). Znotraj tega pokličemo konstruktor 'Test()'. Konstruktor se sproži, ko je predmet razreda »Test()« ustvarjen in določen z vrednostjo »0«, na kateri je vržena izjema.

Po tem znova pokličemo razred »Test()«, da ustvarimo primerek, ki je posredovan z vrednostjo 1. Tukaj konstruktor ne bo vrgel nobene izjeme, ker vrednost ni enaka 0. Funkcija display() bo izvedi in natisni vrednost 'val'.

Izjema po meri se sproži na konzoli s klicem konstruktorja. Tudi ko je pogoj izpolnjen, se konstruktor izvede brez izjeme.

Primer 4: Program za ustvarjanje uporabniško določene izjeme po meri

Program tukaj obravnava in ujame izjemo, ki jo določi uporabnik, ko ga vpraša v pozivu.

#include
#include
uporabo imenski prostor std ;
razred MyDemo : javnosti izjema {
javnosti :
konst char * kaj ( ) konst metati ( )
{
vrnitev 'Izjema! Poskušal sem deliti z ničlo.! \n ' ;
}
} ;
int glavni ( )
{
poskusi
{
int n1, n2 ;
cout << 'Vnesite dve celi števili: \n ' ;
prehranjevanje >> n1 >> n2 ;
če ( n2 == 0 )
{
MyDemo n3 ;
metati n3 ;
}
drugače
{
cout << 'n1/n2 = ' << n1 / n2 << konec ;
}
}
ulov ( izjema & exc )
{
cout << exc. kaj ( ) ;
}
}

V podani kodi najprej definiramo razred »MyDemo()«, ki je odvisni razred izjeme. Po tem nastavimo javno funkcijo what() s ključno besedo 'virtualno'. Funkcija what() se prikliče, da dobi vzrok izjeme v programu, ko funkcija throw() vrže izjemo. Nato imamo funkcijo main(), kjer so bloki try-catch{} definirani za odkrivanje in obravnavanje izjeme. Znotraj bloka try{} deklariramo dve spremenljivki, “n1” in “n2”, katerih vrednosti so vzete od uporabnika z ukazom “cin”. Ko so prejete vrednosti za vsako spremenljivko »n1« in »n2«, bo pogoj »if« preveril, ali je spremenljivka »n2« enaka 0 ali ne. Če je tako, se sproži izjema ali pa se vrnejo rezultati deljenja. Nazadnje imamo blok catch{}, ki vzame referenco razreda »izjeme« kot parameter, podedovan iz njega.

Izhod pokaže, ko pogoj ni izpolnjen in se program izvede brez izjeme:

Prav tako definiramo vrednost »0« za spremenljivko »n2«, ki predstavlja, kako se izjema vrže in ujame v programu.

Zaključek

Na koncu smo pokazali pomemben koncept C++, ki je izjema. Izjema ovira redno izvajanje programa. Za to smo uporabili ključne besede »throw«, »try« in »catch« za obravnavanje izjeme, ki se zgodi v programu. Te ključne besede smo uporabili v prejšnjih primerih za drugačno obravnavo izjeme.