Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++ - исключения

22K
06 января 2007 года
webfashion
13 / / 06.01.2007
Утром экзамен, глянул в билеты, там "обработка исключений". Помогите пожалуйста, объясните на пальцах как с ними работать, Яndex не помог:(.

Заранее огромное спасибо.
8.8K
06 января 2007 года
The_Ice
109 / / 04.04.2006
самый простой это проверка условиями. т.е.
 
Код:
if(b)
{
   c=a/b;
}else
{
   printf("деление на ноль");
}

Или вот выдержка из хелпа библиотеки C++:
This following example program demonstrates the use of exceptions:
Код:
#include <stdexcept>
#include <string>
static void f() { throw runtime_error("a runtime error"); }
int main ()
{
 string s;
 
 // First we'll try to incite then catch an exception
 // from the Standard C++ Library string class.
 // We'll try to replace at a position that is non-existent.
 //
 // By wrapping the body of main in a try-catch block we can be
 // assured that we'll catch all exceptions in the exception
 // hierarchy. You can simply catch an exception as is done below,

 // or you can catch each of the exceptions in which you have an
 // interest.
 try
 {
   s.replace(100,1,1,'c');
 }
 catch (const exception& e)
 {
   cout << "Got an exception: " << e.what() << endl;
 }
 // Now we'll throw our own exception using the function
 // defined above.
 try
 {
   f();
 }
 catch (const exception& e)
 {
   cout << "Got an exception: " << e.what() << endl;
 }

return 0;
}

по-моему все понятно (:
11K
06 января 2007 года
.nornad
125 / / 04.01.2007
Думаю, приведённого примера без пояснений недостаточно. К тому же там нет самостоятельного возбуждения исключения.
Ключевые слова для работы с исключениями:
try - начало блока, в котором будет происходить "отлов" исключений. В принципе, любая программа под винду сейчас имеет главный цикл, расположенный именно в таком блоке. Синтаксис - try { ....... }
catch - начало блока обработки пойманного исключения. Ловить можно исключения конкретных типов или вообще любые. Тип отлавливаемого (и обрабатываемого в блоке catch) исключения указывается в круглых скобках после слова catch. Для любых типов исключений в скобках указывается многоточие. С одним блоком try могут быть связаны несколько блоков catch. При этом будет выбран первый найденный блок catch, к типу которого можно привести (неявно) тип пойманного исключения. Если после обработки исключения надо позволить обработать его и внешнему блоку отлова исключений, то производим повторное возбуждение исключения с помощью throw. Синтаксис - catch ( тип ) { ........ }
throw - возбуждение исключительной ситуации. При возбуждении исключительной ситуации для упрощения обработки исключения производят передачу некоторой информации, которая и определяет тип исключения (по которому его и отлавливает catch). Синтаксис - throw значение.

Пример:
Код:
try {
  //if ( 0 == b ) throw "divisin by zero";
  c = a / b;
}
catch( char* excpt ) {
  // сюда попадём, если раскомментируем if и b будет равно 0
  printf( excpt );
}
catch( ... ) {
  // сюда попадём при любом исключении, если оно не отловлено предыдущим catch
  printf( "division by zero" );
}
22K
06 января 2007 года
webfashion
13 / / 06.01.2007
.nornad, огромное тебе спасибо. Теперь все стало понятно!

The_Ice, пример и правда был непонятен сначала. А MSDN конечно рулит:).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог