Предыдущий пост -
Следующий пост -

Использование класса Exception.

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

Рассмотрите использование класса exception как корневого для всей иерархии исключений. Как это будет выглядеть? Как это нужно использовать? К чему это может привести? Какие недостатки могут вытекать из такого подхода?

Ссылка на описание по использованию класса exception http://www.kselax.ru/2013/04/klass-stdexception/ . Мне от чото кажется я сам класс exception не полностью описал, там я прочитал имеется вроде очень много функций различных, от подумываю мб взять и в книге посмотреть ка что делать? Хотя как то лень.
Да щас просто пролистаю главу мб чото и найду интересное. У меня уже конечно есть, что написать в голове.

Почитал. Нашол конечно кое что интересное. Там например я должен было создать исключение типа Size для вектор, там был примерчик как его создать, но я эту часть задачки пропустил. Ну да ладно, начинаем решать по предложению из задачки будем разбирать. Итак начнем!

Рассмотрите использование класса exception как корневого для всей иерархии исключений. Ну что тут сказать хз. Для какой такой всей иерархии исключений рассмотреть? Наверно скорее всего для глобальной так как есть. Ну он и так корневой как бы. Идем дальше не будем зацикливаться на непонятных частях.

Как это будет выглядеть? Да exception просто будет базовым классом, а все остальные классы производными от него.

Как это нужно использовать? Ну как использовать? Да наверно просто подключать заголовочные файлы классов, а затем вызывать исключения через throw. Так далее.

К чему это может привести? Да хз. к чему это может привести. Я думаю должно быть все нормально. Ну могу предположить какой ответ хотели услышать на этот вопрос. Это приведет к тому, что любое производное исключение можно обрабатывать через объект exception. Щас еще попробую примерчик привести.

//obrabotka exception primer
#include <iostream>
using std::cout;
using std::endl;

class except
{
public:
	virtual void f(){}
};
class hellow : public except
{
public:
	void f(){cout <<"hellow"<<endl;}
};
class world : public except
{
public:
	void f(){cout <<"world"<<endl;}
};
class gacpada : public except
{
	void f(){cout <<"gacpada"<<endl;}
};

int main()
{
	try
	{
		throw hellow();
		throw world();
		throw gacpada();
	}
	catch(except& e)
	{
		e.f();
	}
	
	return 0;
}

От в этом примерчику мы просто создаем базовый класс except от которого создаем 3 производных класса hellow, world, gacpada. Затем делаем вызов throw hellow(), или throw world() и у нас один обработчик все нормально обрабатывает, потому что класс hellow и класс world и gacpada есть except, поэтому вызывается один и тот же обработчик catch(except& e). Это конечно хорошо просто используя механизм виртуальных функций мы даже не думаем какую функцию вызвать.

Какие недостатки могут вытекать из такого подхода? Ну я не знаю даже, опыта у меня маловато. Но достоинства явно видно. Отсутствие проверки.

[youtube]http://www.youtube.com/watch?v=UcuoFTMC324[/youtube]

rss