Undtagelse Håndtering i C ++ - Del 2 Indledning Dette er del 2 af min serie, Undtagelse i C ++. Med C ++ undtagelser, hvad der er kastet af de kast udtryk kaldes en operand. I denne del af serien ser vi, hvordan flere operander kan smides i C ++. Bemærk: Hvis du ikke kan se koden, eller hvis du tror noget mangler (brudt link, billede fraværende), bare kontakte mig på [email protected]. Det vil sige, kontakt mig for det mindste problem, du har om, hvad du læser.
Forskellige måder at smide flere operander En prøve blok kan have flere throw udsagn, og hvert udsagn smide en bestemt (en) operand. Et kast erklæring kan også kaste et array. Vi ser på disse to måder at kaste flere operander. Adskillige smide Udtalelser i en prøve-blok Du kan have flere throw udsagn i en prøve blok. Det afgørende her er, at operand for hvert kast redegørelse skal være af en type forskellig fra de andre throw udsagn. Der bør være det samme antal tilsvarende fangst- blokke.
På dette punkt, jeg nødt til at gøre en afklaring mellem det, vi har lært i den foregående del af serien, og hvad vi er ved at lære nu. Hvis i try-blok, har du flere throw udsagn af samme type, så er du nødt én catch-blok for alle dem kast. I catch-blok, hvis-sætninger kan bruges til at vælge de forskellige operanddata værdier. Det, vi er ved at lære nu, er dette: Hvis i try-blok, har du flere smide udsagn hver af en anden type, så du behøver tilsvarende fangst blokke for de forskellige typer.
Hver af disse fangst- blokke ville ikke brug for, hvis-erklæringer for at vælge en operand værdi, fordi kriteriet for en catch-blok til at fange et indkast er kun, at parameteren type fangsten blokken skal være den samme som den type af kastet operand. Her bør parametrene for de fangstbegrænsninger blokke være af forskellige typer, der hver svarer til et af kast sætning i try-blokken. Hver catch-blok fanger kast, hvis operand er af samme type som dens parameter. Følgende kode illustrerer dette: #include hjælp namespace std; int main () {try {smide 5; //en int smide 4.
6; //en dobbelt (til float) kaste 'B'; //en char smide "noget tekst"; //en streng} fangst (int i) {cout} catch (dobbelt d) {cout} catch (char c) {cout} catch (const char * str) {cout} tilbagevenden 0; } Nu er dette er vigtigt: I et forsøg blok, ingen opgørelse udføres inden udgangen af try-blok efter et indkast erklæring er blevet henrettet. Så i ovenstående kode, vil kun den første kast erklæring blive henrettet; Det vil blive fanget af int catch-bl