• Source
    1. #include <iostream>
    2. #include <stdexcept>
    3. using namespace std;
    4. class Date{
    5. public:
    6. class Invalid{};// A class as exception
    7. Date(int y, int m,int d);
    8. Date():Date(0,1,1){}
    9. int year(){return y;}
    10. int month(){return m;}
    11. int day(){return d;}
    12. private:
    13. int y, m, d;
    14. bool is_valid();
    15. };
    16. Date::Date(int yy,int mm,int dd):y{yy},m{mm},d{dd}
    17. {
    18. if(!is_valid()) throw Invalid{};
    19. }
    20. bool Date::is_valid(){
    21. if(m<1||m>12) return false;
    22. // skip other checkings.
    23. else return true;
    24. }
    25. void f(int m){
    26. try{
    27. Date date {2014,m,2};
    28. cout<<date.month()<<endl;
    29. }
    30. catch(Date::Invalid){
    31. throw invalid_argument("invalid date");
    32. }
    33. }
    34. int main(){
    35. int x=1;
    36. try{
    37. f(x);
    38. f(x+12);
    39. f(x+3);
    40. }
    41. catch(exception & e){
    42. cout<<e.what()<<endl;
    43. }
    44. f(x+2);
    45. }