Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:05. Функции / Examples / 06_operator_overloading / Date
.cpp#include "Date.h"
/* Функция для определения, является ли год переданной даты високосным */
bool isLeapYear(const Date& date)
{
const int& y = date.yyyy;
if ( y % 4 == 0 &&
(y % 100 != 0 || y % 400 == 0) )
return true;
else
return false;
}
Date getCurrentDate()
{
Date currentDate;
time_t timestamp; // Отметка времени - количество секунд после начала Unix-эпохи
tm* ptm; // Указатель на структуру, которая будет содержать поля
// даты для числа, месяца, года и т.д.
// Получаем кол-во секунд, прошедших с начала Unix-эпохи до тек. момента
time(×tamp);
// Заполняем структуру типа tm на основе переданной отметки времени
ptm = gmtime(×tamp);
// Заполняем нашу переменную типа date на основе полей структуры типа tm
currentDate.dd = ptm->tm_mday;
currentDate.mm = (Month)(ptm->tm_mon + 1);
currentDate.yyyy = ptm->tm_year + 1900;
return currentDate;
}
/* Префиксный инкремент. Увеличивает дату на 1 день,
возвращая ссылку на свой параметр */
Date& operator ++ (Date& date)
{
// Реализовать, чтобы работало правильно
date.dd++;
return date;
}
/* Постфиксный инкремент. Увеличивает дату на 1 день,
возвращая копию старого значения */
Date operator ++ (Date& date, int)
{
// Реализовать
}
/* Операция вывода даты в поток в формате dd.mm.yyyy */
ostream& operator << (ostream& os, const Date& date)
{
os << setfill('0');
os << setw(2) << date.dd << '.';
os << setw(2) << (int)date.mm << '.';
os << setw(4) << date.yyyy;
os << setfill(' ');
return os;
}
/* Операция ввода даты из потока в формате dd.mm.yyyy */
istream& operator >> (istream& is, Date& d)
{
// Реализовать
}
/* Операции сравнения. Та дата меньше, которая хронологически раньше */
bool operator < (const Date& date1, const Date& date2)
{
return (date1.yyyy < date1.yyyy) ||
(date1.yyyy == date2.yyyy && date1.mm < date2.mm) ||
(date1.yyyy == date2.yyyy && date1.mm == date2.mm && date1.dd < date2.dd);
}
/* Реализовать */
bool operator > (const Date& date1, const Date& date2);
bool operator == (const Date& date1, const Date& date2);
bool operator != (const Date& date1, const Date& date2);
int operator - (const Date& date1, const Date& date2);
Date& operator -- (Date& date);
Date operator -- (Date& date, int);
Соседние файлы в папке 06_operator_overloading