Показать сообщение отдельно
Старый 06.01.2010, 16:32   #2
ISergey
AnyKey`щик
 
Регистрация: 10.11.2008
Сообщений: 18
Написано 4 полезных сообщений
(для 5 пользователей)
Ответ: Обработка ошибок, логи и не только.

1. Не охота писать конструктор в производных классах
#include <iostream>

using namespace std;

class Error
{
public:
	virtual ~Error() {}
	void Log() {
		cout<< GetErrorName() << " : " <<GetSolutionName() << endl;
	}
	virtual const char * GetErrorName() = 0;
	virtual const char * GetSolutionName() = 0;
};

class BeerIsOver : public Error
{
public:
	const char * GetErrorName()    { return "You beer is over";}
	const char * GetSolutionName() { return "bye";}
};

class LightIsRed : public Error
{
public:
	const char * GetErrorName()    { return "Lamp is red!";}
	const char * GetSolutionName() { return "don't see";}
};

int main()
{

	try
	{
		throw BeerIsOver();
	}
	catch(Error &r)
	{
		r.Log();
	}

	try
	{
		throw LightIsRed();
	}
	catch(Error &r)
	{
		r.Log();
	}

	cout << "Ok..." << endl;
	return 0;
}
__________________
Шутить надо так, чтобы потом не было мучительно больно за бесцельно выбитые зубы.
(Offline)
 
Ответить с цитированием