Тема: Перевантаження операцій
Виникла проблема, програма не дає ввести іншу дату і не порівнює, оскільки після вводу першої дати результати зникають, пробувала затримки екрану не допомагає(
Побудувати клас КАЛЕНДАР. Визначити необхідні конструктори,
методи, деструктор, Перевантажити операцію = для встановлення дати
операції +=, -= для додавання та віднімання днів, місяців, років до заданої
дати, операції ==, !=, >, >=,<, <= для порівняння дат. Перевантажити потокові
операції, введення-виведення. Для перевантаження операцій використати
операторні методи класу та дружні функції.
#include "stdafx.h"
#include < iostream > #include < assert.h >
using namespace std;
class calendar {
private:
int year;
int month;
int day;
public:
calendar(int = 0, int = 0, int = 0);
~calendar();
calendar operator += (calendar & );
calendar operator -= (calendar & );
calendar operator = (calendar & );
calendar operator != (calendar & );
calendar operator > (calendar & );
calendar operator < (calendar & );
calendar operator >= (calendar & );
calendar operator <= (calendar & );
calendar operator == (calendar & );
friend istream & operator >> (istream & , calendar & );
friend ostream & operator << (ostream & , calendar & );
};
calendar::calendar(int y, int m, int d) {
year = y;
month = m;
day = d;
}
calendar calendar::operator = (calendar & y) {
return (year = y.year,
month = y.month,
day = y.day);
}
calendar calendar::operator += (calendar & y) {
year = y.year + year;
month = y.month + month;
if (month > 12) {
year++;
month = month - 12;
}
day =
y.day +
day;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 9 ||
month == 11) {
if (day > 31) {
month++;
day = day - 31;
}
}
if (
month == 4 || month == 6 || month == 8 || month == 10 || month == 12) {
if (day > 30) {
month++;
day = day - 30;
}
}
if (
month == 2) {
if (day > 28) {
month++;
day = day - 28;
}
}
return calendar(year, month, day);
}
calendar calendar::operator -= (calendar & y) {
year = y.year - year;
month = y.month - month;
if (month < 1) {
year--;
month = month + 12;
}
day =
y.day -
day;
if (month == 1 || month == 5 || month == 7 || month == 9 || month == 11) {
if (day < 1) {
month--;
day = day + 30;
}
}
if (
month == 2 || month == 4 || month == 6 || month == 8 || month == 10 ||
month == 12) {
if (day < 1) {
month--;
day = day + 31;
}
}
if (
month == 3) {
if (day < 1) {
month--;
day = day + 28;
}
}
return calendar(year, month, day);
}
calendar calendar::operator != (calendar & y) {
if (year != y.year) {
cout << "rizni daty " << endl;
} else {
if (month != y.month) {
cout << "rizni daty " << endl;
} else {
if (day != y.day) {
cout << "rizni daty " << endl;
} else {
cout << "Error. Odnakovi daty" << endl;
}
}
}
return calendar(year, month, day);
}
calendar calendar::operator == (calendar & y) {
if (year != y.year) {
cout << "Error. Rizni daty " << endl;
} else {
if (month != y.month) {
cout << "Error. Rizni daty " << endl;
} else {
if (day != y.day) {
cout << "Error. Rizni daty " << endl;
} else {
cout << "Odnakovi daty" << endl;
}
}
}
return calendar(year, month, day);
}
calendar calendar::operator < (calendar & y) {
if (year > y.year) {
cout << "Error. First date is 'bigger' " << endl;
}
if (
year < y.year) {
cout << "First date is lower" << endl;
}
if (
year == y.year) {
if (month > y.month) {
cout << "Error. First date is 'bigger' " << endl;
}
if (
month < y.month) {
cout << "First date is lower" << endl;
}
if (
month == y.month) {
if (day > y.day) {
cout << "Error. First date is 'bigger' " << endl;
}
if (
day < y.day) {
cout << "First date is lower" << endl;
}
if (
day == y.day) {
cout << "Error. Odnakovi daty" << endl;
}
}
}
return calendar(year, month, day);
}
calendar calendar::operator > (calendar & y) {
if (year > y.year) {
cout << "First date is 'bigger' " << endl;
}
if (
year < y.year) {
cout << "Error.First date is lower" << endl;
}
if (
year == y.year) {
if (month > y.month) {
cout << "First date is 'bigger' " << endl;
}
if (
month < y.month) {
cout << "Error. First date is lower" << endl;
}
if (
month == y.month) {
if (day > y.day) {
cout << "First date is 'bigger' " << endl;
}
if (
day < y.day) {
cout << "Error. First date is lower" << endl;
}
if (
day == y.day) {
cout << "Error. Odnakovi daty" << endl;
}
}
}
return calendar(year, month, day);
}
calendar calendar::operator <= (calendar & y) {
if (year > y.year) {
cout << "Error. First date is 'bigger' " << endl;
}
if (
year < y.year) {
cout << "First date is lower" << endl;
}
if (
year == y.year) {
if (month > y.month) {
cout << "Error. First date is 'bigger' " << endl;
}
if (
month < y.month) {
cout << "First date is lower" << endl;
}
if (
month == y.month) {
if (day > y.day) {
cout << "Error. First date is 'bigger' " << endl;
}
if (
day < y.day) {
cout << "First date is lower" << endl;
}
if (
day == y.day) {
cout << "Odnakovi daty" << endl;
}
}
}
return calendar(year, month, day);
}
calendar calendar::operator >= (calendar & y) {
if (year > y.year) {
cout << "First date is 'bigger' " << endl;
}
if (
year < y.year) {
cout << "Error.First date is lower" << endl;
}
if (
year == y.year) {
if (month > y.month) {
cout << "First date is 'bigger' " << endl;
}
if (
month < y.month) {
cout << "Error. First date is lower" << endl;
}
if (
month == y.month) {
if (day > y.day) {
cout << "First date is 'bigger' " << endl;
}
if (
day < y.day) {
cout << "Error. First date is lower" << endl;
}
if (
day == y.day) {
cout << "Odnakovi daty" << endl;
}
}
}
return calendar(year, month, day);
}
istream & operator >> (istream & is, calendar & x) {
char c;
cout << "vveditj datu:" << endl;
cin >> x.year;
cin >> c;
assert(c == '.');
cin >> x.month;
cin >> c;
assert(c == '.');
cin >> x.day;
return is;
}
ostream & operator << (ostream & os, calendar & x) {
cout << "date:" << endl;
os << x.year << '.' << x.month << '.' << x.day << endl;
return os;
}
calendar::~calendar() {}
int main(int argc, char * * argv) {
calendar a(1999, 12, 9);
calendar b(2000, 6, 20);
cin >> b;
cout << b << endl;
a += b;
cout << "addition " << a << endl;
a > b;
return 0;
}