Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<cmath>
- using namespace std;
- class Date {
- int year, month, day;
- public:
- Date() {}
- Date(int a, int b, int c) : year(a), month(b), day(c) {}
- Date operator + (const Date &a) {Date c(this -> year + a.year , this -> month + a.month ,this -> day + a.day ); c.norm(); return c; }
- Date operator + (const int &a) {Date c(this -> year, this -> month, this -> day + a); c.norm(); return c; }
- Date operator - (const Date &a) {Date c(this -> year - a.year , this -> month - a.month ,this -> day - a.day ); c.norm(); return c; }
- friend Date operator ++ (Date &a);
- friend Date operator ++ (Date &a, int);
- Date & operator = (const Date &a) {
- year = a.year;
- month = a.month;
- day = a.day;
- return *this;
- }
- Date & operator = (const int a) {
- year = month = day = a;
- return *this;
- }
- void set(char k) {
- cout << "Please, enter YYYY MM DD " << k << ": ";
- cin >> year >> month >> day;
- return;
- }
- void get(char k) {
- cout << " Date " << k << ": " << year << " " << month << " " << day << endl;
- return;
- }
- int getMaxDay(int month, int year) {
- if (month == 2) {
- if (isLeapYear(year)) {
- return 29;
- }
- return 28;
- }
- if (month % 2 == 0) {
- if (month < 7) return 30;
- return 31;
- }
- if (month < 8) return 31;
- return 30;
- }
- bool isLeapYear(int year) {
- return (!(year % 4) && year % 100 || !(year % 400));
- }
- void norm() {
- if (day < 1) {
- day += getMaxDay(month - 1, year);
- month--;
- }
- if (month < 1) {
- year--;
- month += 12;
- }
- if (day > getMaxDay(month, year)) {
- day -= getMaxDay(month, year);
- month++;
- }
- if (month > 12) {
- month -= 12;
- year++;
- }
- return;
- }
- };
- int main() {
- Date a, b, c;
- a.set('a');
- b.set('b');
- cout << endl << " operator + " << endl;
- c = a + b;
- cout << "c = a + b" << endl;
- c.get('c');
- c = a + 30;
- cout << "c = a + 30" << endl;
- c.get('c');
- cout << endl << " operator - " << endl;
- c = a - b;
- cout << "c = a - b" << endl;
- c.get('c');
- cout << endl << " operator ++ " << endl;
- c = ++a;
- cout << "c = ++a " << endl;
- c.get('c');
- a.get('a');
- c = a++;
- cout << "c = a++ " << endl;
- c.get('c');
- a.get('a');
- return 0;
- }
- Date operator ++ (Date &a) {
- a.day = a.day + 1;
- a.norm();
- return a;
- }
- Date operator ++ (Date &a, int){
- Date _a = a;
- a.day = a.day + 1;
- a.norm();
- return _a;
- }
Add Comment
Please, Sign In to add comment