C i C + + programiranje resursi

Označavanje
Custom Search

Iznimka rukovanje

Poslano dana 10. rujna 2008

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.

  1. probati - Ona identificira blok koda u kojem se može pojaviti izuzetak
  2. ulov - identificira blok koda u kojem je iznimka rukovan
  3. 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: , , ,

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.


Dopust jedan Odgovor

Morate biti prijavljeni da biste napisati komentar.