When designing an exception class, think of it as a standalone class with data members and member functions. A well-designed exception class should have a member function that returns a verbal description of the exception. In applications that use error codes, you should also include a member function that returns the exception's numeric code. This way, the handler of that exception doesn't need to look for this information elsewhere; it can retrieve it from the exception object directly.
const char * description() const;
int code_number() const;
catch( myException & ex)
cout<<" error occurred: "<< ex.description();
cout<< "with code: " << ex.code_number();
Remember also that sometimes the same exception can be thrown in similar but not identical situations. For example, a DBMS system can throw the same exception when it encounters a referential integrity problem or an attempt to insert a duplicate key. To distinguish between these errors, the handler can query the exception object and obtain a precise description of the actual error that occurred.