Unntak håndtering i C ++ - Del 2 Innledning Dette er del 2 av min serie, Unntak i C ++. Med C ++ unntak, hva som er kastet av innkastet uttrykk kalles en operand. I denne delen av serien ser vi hvordan flere operander kan bli kastet i C ++. Merk: Hvis du ikke kan se koden, eller hvis du tror noe mangler (ødelagt kobling, bilde fraværende), bare kontakte meg på [email protected]. Det er, kontakt meg for den minste problemet du har om hva du leser. Ulike måter å kaste flere operander En prøve blokk kan ha flere kaste uttalelser, og hver setning kaster et spesielt (en) operand.
Et kast uttalelse kan også kaste en matrise. Vi ser på disse to måtene å kaste flere operander. Flere kaste Uttalelser i en prøve-blokk Du kan ha flere kaste uttalelser i et forsøk blokk. Det som teller her er at operand av hvert kast utsagn bør være av en type som er forskjellig fra de andre kaste uttalelser. Det bør være av samme antall som tilsvarer fangst blokker. På dette punktet må jeg gjøre noen avklaring mellom det vi lærte i forrige del av serien og det vi lærer nå.
Hvis du er i forsøk blokken, har du flere kaste uttalelser av samme type, så du trenger en catch-blokken for alle de som kaster. I catch-blokken if-setninger kan brukes til å velge forskjellige operand verdier. Hva vi lærer nå er dette: Hvis jeg er i prøve blokk, har du flere pynte uttalelser hver av en annen type, så du trenger tilsvarende fangststeiner for de forskjellige typene.
Hver av disse fangst blokkene ville ikke trenge if-setninger til å velge en hvilken som helst operand verdi, fordi kriteriet for fangst blokk for å få et kast er bare at paratypen catch-blokken bør være den samme som den type kastet operanden. Her bør parametrene av fangblokkene være av forskjellige typer, som hver svarer til en av innkastet setningen i prøve-blokken. Hver catch-blokken fanger innkastet som operand er av samme type som parameter.
Følgende kode illustrerer dette: # include bruker namespace std; int main () {try {kaste 5; //en int kaste 4,6; //en dobbel (for float) throw 'B'; //en char kaste "tekst"; //en streng} catch (int i) {cout} catch (double d) {cout} catch (char c) {cout} catch (const char * str) {cout} return 0; } Nå er dette viktig: I et forsøk blokk, er ingen uttalelse utført før slutten av prøve blokk etter et innkast uttalelsen er utført. Så i koden ovenfor, vil bare den første kast uttalelsen bli henrettet; det vil bli fanget opp av int catch-blokken.
Hvis du vil ha den doble unntaket skal tre i kraf