Создайте класс с именем Date для хранения даты (или
используйте ранее созданный).
В классе должна быть функция-член, которая увеличивает день на 1.
Напишите соответствующие конструкторы и функции-члены.
В классе должны быть перегружены операциии ++, — ,
!=, ==, >, >, <<, =, +=, -=, ().
Используйте обычную и дружественную перегрузку.
cpp
class Date {
private:
int day;
int month;
int year;
public:
/* Конструкторы */
Date() {
day = 1;
month = 1;
year = 1970;
}
Date(int d, int m, int y) {
day = d;
month = m;
year = y;
}
/* Функция-член для увеличения дня на 1 */
void nextDay() {
day++;
if (day > daysInMonth(month, year)) {
day = 1;
month++;
if (month > 12) {
month = 1;
year++;
}
}
}
/* Перегрузка операторов */
Date operator++() { // префиксная форма инкремента
nextDay();
return *this;
}
Date operator--() { // префиксная форма декремента
day--;
if (day < 1) {
month--;
if (month < 1) {
month = 12;
year--;
}
day = daysInMonth(month, year);
}
return *this;
}
bool operator==(const Date& other) {
return (day == other.day) && (month == other.month) && (year == other.year);
}
bool operator!=(const Date& other) {
return !(*this == other);
}
bool operator>(const Date& other) {
if (year > other.year)
return true;
if (year < other.year)
return false;
if (month > other.month)
return true;
if (month < other.month)
return false;
return day > other.day;
}
friend std::ostream& operator<<(std::ostream& os, const Date& date) {
os << date.day << '.' << date.month << '.' << date.year;
return os;
}
friend std::istream& operator>>(std::istream& is, Date& date) {
char dot;
is >> date.day >> dot >> date.month >> dot >> date.year;
return is;
}
Date& operator=(const Date& other) {
day = other.day;
month = other.month;
year = other.year;
return *this;
}
Date operator+=(int days) {
for (int i = 0; i < days; i++) {
nextDay();
}
return *this;
}
Date operator-=(int days) {
for (int i = 0; i < days; i++) {
--(*this);
}
return *this;
}
/* Дополнительная функция для определения количества дней в месяце */
int daysInMonth(int month, int year) {
if (month == 2) {
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
return 29;
else
return 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
};
Пример использования класса Date и его методов:
cpp
#include <iostream>
int main() {
Date date1; // Создание объекта класса Date с использованием конструктора без параметров
std::cout << "date1: " << date1 << std::endl; // Вывод даты
Date date2(31, 12, 2010); // Создание объекта класса Date с использованием конструктора с параметрами
std::cout << "date2: " << date2 << std::endl; // Вывод даты
date2++; // Инкремент даты (увеличение на 1 день)
std::cout << "date2 incremented: " << date2 << std::endl; // Вывод инкрементированной даты
date2--; // Декремент даты (уменьшение на 1 день)
std::cout << "date2 decremented: " << date2 << std::endl; // Вывод декрементированной даты
Date date3(1, 1, 2011);
if (date2 == date3) { // Проверка на равенство дат
std::cout << "date2 is equal to date3" << std::endl;
} else {
std::cout << "date2 is not equal to date3" << std::endl;
}
if (date2 != date3) { // Проверка на неравенство дат
std::cout << "date2 is not equal to date3" << std::endl;
} else {
std::cout << "date2 is equal to date3" << std::endl;
}
if (date2 > date3) { // Проверка на больше
std::cout << "date2 is greater than date3" << std::endl;
} else {
std::cout << "date2 is not greater than date3" << std::endl;
}
std::cout << "Enter a new date in format dd.mm.yyyy: ";
Date date4;
std::cin >> date4; // Ввод даты с клавиатуры
std::cout << "date4: " << date4 << std::endl; // Вывод введенной пользователем даты
date4 += 5; // Увеличение даты на 5 дней
std::cout << "date4 incremented by 5 days: " << date4 << std::endl;
date4 -= 2; // Уменьшение даты на 2 дня
std::cout << "date4 decremented by 2 days: " << date4 << std::endl;
return 0;
}
В данном примере создается класс `Date`, который представляет собой дату с днем, месяцем и годом. В классе определены конструкторы, функция-член для увеличения дня на 1, а также перегружены операторы ++, --, !=, ==, >, <<, =, +=, -=.
Конструктор без параметров инициализирует дату значением 1 января 1970 года. Конструктор с параметрами позволяет задать любую дату.
Функция-член `nextDay` увеличивает дату на 1 день. Она проверяет, сколько дней в текущем месяце (зависит от года и месяца), и если текущий день достигает последнего дня в месяце, то он переходит на следующий месяц или год.
Операторы инкремента и декремента перегружены для увеличения и уменьшения даты на 1 день соответственно.
Операторы сравнения `==`, `!=` и `>` позволяют сравнить две даты между собой.
Операторы `<<` и `>>` перегружены для вывода и ввода даты соответственно. При вводе даты с клавиатуры используется формат `dd.mm.yyyy`.
Оператор `=` перегружен для присваивания значения одного объекта класса `Date` другому.
Операторы `+=` и `-=` позволяют увеличить и уменьшить дату на определенное количество дней. Они используют функцию-член `nextDay` для реализации этой функциональности.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет