Výjimky C++


Výjimky C++

Při provádění kódu C++ mohou nastat různé chyby: chyby kódování způsobené programátorem, chyby způsobené nesprávným zadáním nebo jiné nepředvídatelné věci.

Když dojde k chybě, C++ se normálně zastaví a vygeneruje chybovou zprávu. Technický termín pro to je: C++ vyvolá výjimku (vyvolá chybu).


C++ zkuste a chytněte

Zpracování výjimek v C++ se skládá ze tří klíčových slov : trya throw:catch

Příkaz tryvám umožňuje definovat blok kódu, který má být testován na chyby během jeho provádění.

Klíčové throwslovo vyvolá výjimku, když je zjištěn problém, což nám umožňuje vytvořit vlastní chybu.

Příkaz catchvám umožňuje definovat blok kódu, který se má provést, pokud v bloku try dojde k chybě.

Klíčová slova trya catchjsou ve dvojicích:

Příklad

try {
  // Block of code to try
  throw exception; // Throw an exception when a problem arise
}
catch () {
  // Block of code to handle errors
}

Zvažte následující příklad:

Příklad

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw (age);
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Age is: " << myNum;
}

Příklad vysvětlen

Blok používáme tryk testování nějakého kódu: Pokud je ageproměnná menší než 18, uděláme throwvýjimku a zpracujeme ji v našem catchbloku.

V catchbloku zachytíme chybu a něco s tím uděláme. Příkaz catchparametr : v našem příkladu používáme intproměnnou ( ) (protože v bloku ( ) myNumvyvoláváme výjimku inttypu ) k výstupu hodnoty .tryageage

Pokud se nevyskytne žádná chyba (např. pokud ageje 20místo 15, což znamená, že bude větší než 18), catchblok je přeskočen:

Příklad

int age = 20;

Klíčové slovo můžete také použít throwk výstupu referenčního čísla, jako je vlastní číslo/kód chyby pro účely organizace:

Příklad

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Error number: " << myNum;
}

Zpracovat jakýkoli typ výjimek (...)

Pokud neznáte throw typ použitý v trybloku, můžete použít syntaxi „tři tečky“ ( ...) uvnitř catchbloku, která zvládne jakýkoli typ výjimky:

Příklad

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (...) {
  cout << "Access denied - You must be at least 18 years old.\n";
}