Класс std::exception.

Рубрика: C++, Дата: 15 April, 2013, Автор:

Здорова господа!

Я решил в этом посте описать стандартный класс исключений std::exception. Как его использовать? Как подключать? Как вызывать исключения? Какие виды исключений бывают?

Как видите очень много вопросов накопилось. Просто я раньше мельком за него читал, не сильно разобрался, что по чем. Так сказать уверенных знаний нету. Ну что ж будем щас работать над этим.

Я от чуток разобрался с этим классом. Итак для того чтобы начать работать с исключениями типа std::exception нужно сначала сделать подключение заголовочного файла, нужно прописать:

#include <exception>
using std::exception;

Отети от две строчки прописываем. Та мы теперь имеем возможность использовать класс exception для перехвата исключений, то есть тип exception.

Какие дальше нам шаги предпринять? Для того чтобы перехватить любые исключения генерируемые классом exception достаточно просто создать обработчик:

catch(exception& e)
{
  cout <<"lovim exception "<<e.what()<<endl;
}

, где exception::what() это функция которая выводит название перехваченного исключения. Щас я вам приведу пример использования exception:

// exception example
#include <iostream>
using std::cout;
using std::endl;
#include <exception> 
using std::exception;
#include <vector>
using std::vector;
#include <string>
using std::string;


//class Polymorphic {virtual void member(){}};

int main () {
  try
  {
  	string a("hellow");
  	cout <<a.at(8);//zdec6 perexvachivaetc9 pervoe icklyuchenie
  	vector<int> b;
  	cout <<b.at(7);//doljno vuletet6 icklyuchenie;
  }
  catch (exception& e)
  {
    cout << "exception caught: " << e.what() << '\n';
  }
  return 0;
}

В этой программке видно как генерируются исключения из объектов стандартной библиотеки.

А теперь зададимся вопросом как же нам самим использовать этот класс? То есть как же нам самим генерировать различные исключения? Да… Я как раз это не разобрал. Щас еще подчитаю и попытаюсь написать программку в которой мы будем генерировать исключения и тут же перехвачивать.

Вот я кое какой код наляпал:

// exception example
#include <iostream>
using std::cout;
using std::endl;
#include <exception> 
using std::exception;
using std::bad_alloc;
//using std::bad_cast; //owibka ne mojet podklyuchitca
using std::bad_exception;
#include <stdexcept>
//using std::bad_typeid; // owibka ne bul deklorirovan
//using std::bad_weak_ptr; // owibka ne bul dekrorirovan
//using std::ios_base::failure;//owibka ne bul deklorirovan

//using std::bad_exception;
using std::logic_error;//op9t6 ne deklorirovan owibka
//using std::runtime_error;
using std::out_of_range;

int main () {
  try
  {  	
  	throw out_of_range("vuwlo");
  	throw logic_error("Hellow");
  	//throw ios_base::failure();//owibka ne bul deklorirovan
  	//throw bad_weak_ptr();//owibka ne bul deklorirovan
  	//throw bad_typeid();//owibka ne bul deklorirovan
  	throw bad_exception();
  	//throw bad_cast();//owibka ne mojet podklyuchitc9
  	throw bad_alloc();
  }
  catch (exception& e)
  {
    cout << "exception caught: " << e.what() << '\n';
  }
  return 0;
}

Как мы видим из кода главное знать какие заголовки подключать. Я сначала запутался да и документация по С++ галимая на английском языке. 🙂

[youtube]http://www.youtube.com/watch?v=Fnd-rskA8Ls[/youtube]

rss