
//
// To jest przykładowy kod z podrozdziału 9.7.1 „Typy argumentów" książki 
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

//------------------------------------------------------------------------------

// Prosta klasa Date (z użyciem typu Month).
class Date {
public:
    enum Month {
        jan=1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec
    };

    Date(int yy, Month mm, int dd) : y(yy), m(mm), d(dd) // Sprawdza poprawność daty i wykonuje inicjację.
    {
        // ...
    }

private:
    int   y; // Rok
    Month m;
    int   d; // Dzień
};

//------------------------------------------------------------------------------

int main()
{
    //Date d1(4,5,2005);            // Błąd: Rok 4, dzień 2005.
    //Date d2(2005,4,5);            // Piąty kwietnia czy czwarty maja?

    //Date dx1(1998, 4, 3);         // Błąd: drugi argument nie jest typu Month.
    //Date dx2(1998, 4, Date::mar); // Błąd: drugi argument nie jest typu Month.
    Date dx2(4, Date::mar, 1998);   // oops: run-time error: day 1998
    //Date dx2(Date::mar, 4, 1998); // Błąd: drugi argument nie jest typu Month.
    Date dx3(1998, Date::mar, 30);  // ok
    return 0;
}

//------------------------------------------------------------------------------
