
Iznimka rukovanje
Iznimke su način označavanje neočekivanih uvjeta ili pogreške koje su se dogodile u C + + programa.
Izuzetak Mehanizam
Do sada smo rješavali stanja pogreške pomoću if naredbi za testiranje neke izraze i onda izvršavanju specifičnih code baviti pogreške. C + + jezika daje dobar mehanizam za tacke navedenim uvjetima. Izuzetak mehanizam
koristi tri ključne riječi.
- probati - Ona identificira blok koda u kojem se može pojaviti izuzetak
- ulov - identificira blok koda u kojem je iznimka rukovan
- bacati - To uzrokuje iznimku uvjet da se nastale
Uvod u Exception Handling
In this tutorial ćemo raspravljajući neke aspekte C + + iznimka rukovanja. Za početak ove rasprave, neka je razmotriti jednostavan primjer. Pretpostavimo da ste pisanje programa za manipulaciju kalendarske datume, i želite provjeriti da li određenoj godini je u 20. stoljeću.
Korištenje iznimke, jedan način da to učinite to može biti:
# Include <IOSTREAM.H> klase DateException (char * griješiti; javnosti: DateException (char * s) (err = s;) void ispis () const (cerr <<pogriješiti <<endl;)); / / funkcija koja djeluje na datume void f (int dan) (if (datum <1900) bacati DateException ("datum <1900"); if (date> 1999) bacati DateException ("datum> 1999"); / / datum napredak ...) / / neki kod koji koristi datume void f () (G (1879);) int main () (try (f ();) catch (const DateException & de) (de.print (); return 1;) return 0; ) Osnovna ideja je da imamo probati blok:
probati ( f (); )
U okviru ovog bloka smo izvršiti neki kod, u ovom slučaju poziv funkcije f ().
Onda smo popis jednog ili više vodiča:
catch (DateException de) ( de.print (); return 1; )
Ako je abnormalno stanje pojavljuje se u kodu, možemo baciti izuzetak:
if (datum <1900) baciti DateException ("datum <1900");
i imati ga uhvatili jednog od vodiča na vanjskom nivou, odnosno, izvođenje će se nastaviti na mjestu rukovatelja s izvršenjem odmotan stog.
Izuzetak može biti klase tip objekta, kao što su DateException ili temeljna tipa C + + kao cijeli broj. Očito, klasa tip objekta može pohraniti i prenijeti više informacija o prirodi, osim, kako je prikazano u ovom primjeru. Govoreći:
bacati -37,
će zaista baciti izuzetak, koji može biti uhvaćen negdje, ali ovaj izraz nije osobito korisna.
Što ako rukovatelj izjavljujemo je malo promjena, kao u:
catch (DateException * de) (de-> print (); return 1;) U ovom slučaju, jer je objekt tipa DateException je bačena, nego DateException * (pokazivač), bez rukovatelja odgovarajuće će se naći u programu. U tom slučaju, vrijeme izvođenja sustav koji obrađuje iznimku obrade će nazvati poseban biblioteka funkcija raskinuti (), a program će pobaciti. Jedan od načina da se izbjegne ovaj problem je da kaže:
main () ( try ( body_of_program (); ) catch (...) ( / / Sve izuzetke prolaze ovdje return 1; ) return 0; )
gdje je "..." će uhvatiti bilo koju vrstu iznimka.
Mi ćemo istražiti razne detalje iznimka rukovanje kasnije, ali opći komentar je u redu. C + + iznimke nisu isti kao low-level hardvera prekine, niti su oni isti kao UNIX signale kao što su SIGTERM. I nema linkage među iznimke, kao što su dijeliti nulom (koji može biti low-level stroj iznimka) i C + + iznimke.
Stranice: [Page - 1] [Page - 2] [Page - 3] [Page - 4] [Page - 5]
Tags: C + + programiranje , ulov , izuzeće , pokušajte
Sviđa ono što vidite?
Postanite jedan od regulars Pretplatite! Vi ćete biti prvi koji će znati kad smo dodali još postova velik kao ovaj. Pridružite se bilo RSS Feeds ili E-mail Obnove danas!
Nema komentara na ovaj post. Možete pratiti bilo koji reakcija to ovaj ulaz preko RSS 2.0 hranjenje . Možete preskočiti do kraja i dati odgovor ili Trackback iz vlastite web lokacije.


































