
//
// To jest przykładowy kod z podrozdziału 9.4.2 „Funkcje składowe i konstruktory” książki 
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

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

// Prosty typ Date.
// Gwarantuje inicjację za pomocą konstruktora.
// Wprowadza pewne udogodnienia notacyjne.
struct Date {
    int y, m, d;                        // Rok, miesiąc, dzień
    Date(int y, int m, int d);          // Sprawdza poprawność daty i wykonuje inicjację.
    void add_day(int n);                // Zwiększa Date o n dni.
};

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

Date::Date(int y, int m, int d) : y(y), m(m), d(d) {}
void Date::add_day(int n) {}

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

int main()
{
    //Date my_birthday;                 // Błąd: nie zainicjowano my_birthday.
    Date today(12,24,2007);             // Błąd czasu wykonania!
    Date last(2000, 12, 31);            // OK (styl potoczny)
    Date christmas = Date(1976,12,24);  // OK (styl rozwlekły)

    // Użycie nowo zdefiniowanych zmiennych:

    last.add_day(1);
    //add_day(2);                       // Błąd: jaki dzień?
}

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