C++ prilagođene iznimke

C Prilagodene Iznimke



Iznimka u C++ je temeljni koncept. Iznimka se događa u vremenu izvođenja kada program naiđe na nedosljednosti u vremenu izvođenja ili neobične scenarije. U C++-u se izrazi 'baci', 'pokušaj' i 'uhvati' koriste za rukovanje ili hvatanje iznimke. Naredba 'throw' koristi se za generiranje iznimke. Izraz 'try' služi za izbacivanje iznimke, a ključna riječ 'catch' predstavlja rukovanje iznimkom koja je razvijena s izrazom 'throw' i izbacuje je odjeljak 'try'. Uronimo u neke primjere kako bismo pokazali iznimke u C++.

Primjer 1: Program za stvaranje prilagođene klase iznimke u C++

Ovaj jednostavan primjer implementiran je da demonstrira prilagođeno rukovanje iznimkama i otkrivanje u C++.

#include
#include
korištenjem imenski prostor std ;

razreda DemoException : javnost izuzetak
{
virtualan konst char * što ( ) konst bacanje ( )
{
povratak 'Uhvaćena prilagođena iznimka' ;
}
} ;
int glavni ( )
{
DemoException dEx ;
probati
{
bacanje dEx ;
}
ulov ( izuzetak i osim )
{
cout << osim. što ( ) << endl ;
}
povratak 0 ;
}

Definiramo datoteku zaglavlja u kodu uključujući 'iostream' i 'exception'. 'iostream' se posebno poziva za ulazni i izlazni tok, dok se biblioteka 'exception' poziva za obradu iznimke. Nakon toga stvaramo klasu “DemoException” koja je izvedena iz klase “exception” u C++. Ovdje postavljamo virtualnu funkciju what() koja se koristi za pružanje const char* koja prikazuje rezultate poruke o pogrešci koja je povezana s iznimkom.







Zatim pozivamo funkciju main() gdje stvaramo objekt 'dEx' klase 'DemoException'. Nakon toga, imamo definiciju bloka 'pokušaj' koja izbacuje iznimku ako naiđe. Ovdje bacamo objekt 'dEx'.



Zatim postavljamo blok 'catch' za hvatanje iznimke i rukovanje njome. Prosljeđujemo referencu iznimke klase kao parametar za hvatanje iznimke koja je izvedena iz nje. Unutar bloka 'catch' pozivamo funkciju what() na 'except' da bismo dobili poruku o iznimci na konzoli.



Nakon izvođenja zadanog programa, prilagođena poruka o iznimci se hvata i šalje na konzolu:





Primjer 2: Program za stvaranje prilagođene iznimke pomoću dvije klase

Program naglašava rad s višestrukim iznimkama koje se mogu neovisno rješavati definiranjem više klasa.



#include
korištenjem imenski prostor std ;

razreda evaluation1 { } ;
razreda evaluacija2 { } ;

int glavni ( ) {
probati {
bacanje evaluation1 ( ) ;
}
ulov ( evaluation1 e ) {
cout << 'Evaluation1 izuzetak uhvaćen!' << endl ;
}
probati {
bacanje evaluacija2 ( ) ;
}
ulov ( evaluacija2 e ) {
cout << 'Evaluacija 2 izuzetak uhvaćen!' << endl ;
}

povratak 0 ;
}

U zadanom kodu imamo definiciju dviju klasa, “Evaluation1” i “Evaluation2”, koje su sada prazne. Nakon toga izvršavamo programsku funkciju main(). Ovdje postavljamo blok try{} gdje se ključna riječ “throw” koristi za izbacivanje instance klase “Evaluation1()”. Ovo predstavlja da se iznimka 'Evaluation1' izbacuje ako se pojavi bilo kakva iznimka u programu unutar ovog bloka 'try'. Nakon toga, imamo blok catch{} gdje se iznimka hvata i prikazuje poruku iznimke.

Slično tome, imamo definiciju drugog bloka try{} za klasu “Evaluation2”. Unutar tog bloka try{} bacamo instancu klase “Evaluation2”. Ovo izbacuje iznimku 'Evaluation2' ako se ovdje pojavi pogreška. Zatim pozivamo blok catch{} za prikaz poruke o iznimci pomoću naredbe “cout” ako je iznimka uhvaćena unutar ovog bloka.

Dvije iznimke različitih 'pokušaj-uhvati' blokova bacaju se u konzolu kojima rukuju dvije različite klase.

Primjer 3: Program za stvaranje prilagođene iznimke s konstruktorom

Program koristi konstruktor za rukovanje iznimkom. Iako ne možemo dobiti vrijednosti iz konstruktora, to možemo postići pomoću bloka “try-catch”.

#include
korištenjem imenski prostor std ;

razreda Test {
int val ;

javnost :
Test ( int n )
{
probati {
ako ( n == 0 )
val = n ;
prikaz ( ) ;
}

ulov ( konst char * eksp ) {
cout << „Pronađena iznimka \n ' ;
cout << eksp << endl ;
}

}

poništiti prikaz ( )
{
cout << 'Vrijednost = ' << val << endl ;
}
} ;

int glavni ( )
{

Test ( 0 ) ;
cout << 'Ponovno stvaranje instance \n ' ;
Test ( 1 ) ;
}

U zadanom kodu uspostavljamo klasu “Test” gdje je varijabla deklarirana kao “val” tipa integer. Zatim imamo definiciju funkcije konstruktora 'Test()' koja se prosljeđuje s varijablom 'n'. Zatim smo postavili blok “try-catch” unutar funkcije konstruktora “Test()”. Blok try se poziva naredbom if(). Ako je vrijednost 'n' jednaka nuli, blok 'catch' će uhvatiti iznimku, a poruka o iznimci bit će izbačena na upit. Vrijednost “n” pohranjuje se u varijabli “val” dok je inicijaliziramo.

Nakon toga pozivamo funkciju display() da prikažemo vrijednost koja je pohranjena u varijabli 'val'. Zatim imamo definiciju bloka 'catch' gdje se obrađuje iznimka koju je izbacio blok 'try'. Na kraju, pozivamo funkciju main(). Unutar kojeg pozivamo konstruktor 'Test()'. Konstruktor se pokreće kada se kreira objekt klase 'Test()' i specificira vrijednost '0' na koju se izbacuje iznimka.

Nakon toga ponovno pozivamo klasu 'Test()' da bismo stvorili instancu koja se prosljeđuje s vrijednošću 1. Ovdje konstruktor neće izbaciti nikakvu iznimku jer vrijednost nije jednaka 0. Funkcija display() će izvršiti i ispisati vrijednost  “val”.

Prilagođena iznimka izbacuje se na konzoli pozivanjem konstruktora. Također, kada je uvjet zadovoljen, konstruktor se izvršava bez iznimke.

Primjer 4: Program za stvaranje korisnički definirane prilagođene iznimke

Program ovdje obrađuje i hvata iznimke koje je definirao korisnik kada se to zatraži u odzivniku.

#include
#include
korištenjem imenski prostor std ;
razreda MyDemo : javnost izuzetak {
javnost :
konst char * što ( ) konst bacanje ( )
{
povratak 'Iznimka! Pokušao sam podijeliti s nulom.! \n ' ;
}
} ;
int glavni ( )
{
probati
{
int n1, n2 ;
cout << 'Unesite dva cijela broja: \n ' ;
jelo >> n1 >> n2 ;
ako ( n2 == 0 )
{
MyDemo n3 ;
bacanje n3 ;
}
drugo
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
ulov ( izuzetak i exc )
{
cout << exc. što ( ) ;
}
}

U danom kodu prvo definiramo klasu 'MyDemo()' koja je ovisna klasa iznimke. Nakon toga postavljamo public what() funkciju s ključnom riječi 'virtualno'. Funkcija what() poziva se da dobije uzrok iznimke u programu kada funkcija throw() izbaci iznimku. Zatim imamo funkciju main() u kojoj su blokovi try-catch{} definirani za otkrivanje i obradu iznimke. Unutar bloka try{} deklariramo dvije varijable, “n1” i “n2”, čije se vrijednosti preuzimaju od korisnika pomoću naredbe “cin”. Kada se primi vrijednost svake varijable 'n1' i 'n2', uvjet 'if' će provjeriti je li varijabla 'n2' jednaka 0 ili ne. Ako je tako, izbacuje se iznimka ili se vraćaju rezultati dijeljenja. Na kraju, imamo blok catch{} koji uzima referencu klase “exception” kao parametar naslijeđen od nje.

Izlaz pokazuje kada uvjet nije ispunjen i program se izvršava bez iznimke:

Također, definiramo vrijednost '0' za varijablu 'n2' da predstavimo kako se iznimka izbacuje i hvata u programu.

Zaključak

U zaključku smo pokazali važan koncept C++ koji je iznimka. Iznimka sprječava redovito izvršavanje programa. Za to smo upotrijebili ključne riječi 'baciti', 'pokušati' i 'uhvatiti' za rješavanje iznimke koja se događa u programu. Koristili smo ove ključne riječi u prethodnim primjerima kako bismo drukčije postupili s iznimkom.