Чтение онлайн

на главную

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

Month m;

int d;

};

bool is_date(int y, Date::Month m, int d); // true для корректных дат

bool leapyear(int y); // true, если y — високосный год

bool operator==(const Date& a, const Date& b);

bool operator!=(const Date& a, const Date& b);

ostream& operator<<(ostream& os, const Date& d);

istream& operator>>(istream& is, Date& dd);

} // Chrono

Определения

находятся в файле
Chrono.cpp
.

// Chrono.cpp

namespace Chrono {

// определения функций-членов:

Date::Date(int yy, Month mm, int dd)

:y(yy), m(mm), d(dd)

{

if (!is_date(yy,mm,dd)) throw Invalid;

}

Date& default_date

{

static Date dd(2001,Date::jan,1); // начало XXI века

return dd;

}

Date::Date

:y(default_date.year),

m(default_date.month),

d(default_date.day)

{

}

void Date:: add_day(int n)

{

// ...

}

void Date::add_month(int n)

{

// ...

}

void Date::add_year(int n)

{

if (m==feb && d==29 && !leapyear(y+n)) { // помните о високосных годах!

m = mar; // 1 марта вместо

// 29 февраля

d = 1;

}

y+=n;

}

// вспомогательные функции:

bool is_date(int y, Date::Month m, int d)

{

// допустим, что y — корректный объект

if (d<=0) return false; // d должна быть положительной

if (m < Date::jan || Date::dec < m) return false;

int days_in_month = 31; // большинство месяцев состоит из 31 дня

switch (m) {

case Date::feb: //
продолжительность февраля варьирует

days_in_month = (leapyear(y)) ? 29:28;

break;

case Date::apr: case Date::jun: case Date::sep: case

Date::nov:

days_in_month = 30; // остальные месяцы состоят из 30 дней

break;

}

if (days_in_month<d) return false;

return true;

}

bool leapyear(int y)

{

// см. упражнение 10

}

bool operator==(const Date& a, const Date& b)

{

return a.year==b.year

&& a.month==b.month

&& a.day==b.day;

}

bool operator!=(const Date& a, const Date& b)

{

return !(a==b);

}

ostream& operator<<(ostream& os, const Date& d)

{

return os << '(' << d.year

<< ',' << d.month

<< ',' << d.day << ')';

}

istream& operator>>(istream& is, Date& dd)

{

int y, m, d;

char ch1, ch2, ch3, ch4;

is >> ch1 >> y >> ch2 >> m >> ch3 >> d >> ch4;

if (!is) return is;

if (ch1!='(' || ch2!=',' || ch3!=',' || ch4!=')') { // ошибка
формата

is.clear(ios_base::failbit); // установлен неправильный
бит

return is;

}

dd = Date(y, Date::Month(m),d); // обновляем dd

return is;

}

enum Day {

sunday, monday, tuesday, wednesday, thursday, friday, saturday

};

Day day_of_week(const Date& d)

{

// ...

}

Поделиться:
Популярные книги

Кодекс Крови. Книга Х

Борзых М.
10. РОС: Кодекс Крови
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга Х

Легат

Прокофьев Роман Юрьевич
6. Стеллар
Фантастика:
боевая фантастика
рпг
6.73
рейтинг книги
Легат

Защитник. Второй пояс

Игнатов Михаил Павлович
10. Путь
Фантастика:
фэнтези
5.25
рейтинг книги
Защитник. Второй пояс

Счастье быть нужным

Арниева Юлия
Любовные романы:
любовно-фантастические романы
5.25
рейтинг книги
Счастье быть нужным

Огненный князь 3

Машуков Тимур
3. Багряный восход
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Огненный князь 3

Гром над Академией Часть 3

Машуков Тимур
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Гром над Академией Часть 3

Не грози Дубровскому! Том III

Панарин Антон
3. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том III

Не отпускаю

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
8.44
рейтинг книги
Не отпускаю

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Приручитель женщин-монстров. Том 4

Дорничев Дмитрий
4. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 4

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII

Польская партия

Ланцов Михаил Алексеевич
3. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Польская партия

Курсант: Назад в СССР 7

Дамиров Рафаэль
7. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 7

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны