标签:c++【面试题】:类实现万年历(日期计算器) 拷贝构造 含构造函数 运算符重载 析构函数)
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<stdlib.h> using namespace std; class Date { public: Date(int year=0, int month=0, int day=0) :_year(year) , _month(month) , _day(day) { cout << "构造函数" << endl; } Date( const Date& d) { cout << "拷贝构造函数" << endl; _year = d._year; _month = d._month; _day = d._day; } /*Date& operater = (const Date& d) { cout << "运算符重载" <<endl; }*/ bool operator == (const Date&d) { return this->_year == d._year && this->_month == d._month &&this->_day = d._month; } //大于 bool operator > (const Date& d) { if (this->_year > d._year) { return true; } else { if (this->_year == d._year) { if (this->_month > d._month) { return true; } else { if (this->_month == d._month) { if (this->_day > d._day) { return true; } else { return false; } } else { return false; } } } else { return false; } } } //小于 bool operator < (const Date& d) { if (this->_year < d._year) { return true; } else { if (this->_year == d._year) { if (this->_month < d._month) { return true; } else { if (this->_month == d._month) { if (this->_day < d._day) { return true; } else { return false; } } else { return false; } } } else { return false; } } } //大于等于 bool operator >= (const Date& d) { if (this->_year >= d._year) { return true; } else { return false; } } //小于等于 bool operator <= (const Date& d) { if (this->_year <= d._year) { return true; } else { return false; } } //Date operator+ (int day); Date operator+ (int day) { } void Display() { cout << _year << "-" << _month << "-" << _day<<endl; } private: //判断平年闰年 bool IsLeapYear(int year) { if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) { return true; } else { return false; } } //判断天数 int GetMonthDay(int year, int month) { if (year && month) { int monthArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int day = monthArray[month]; if (month == 2 && IsLeapYear(year)) { day += 1; } return day; } } //加天数,Date operator+ (int day) Date operator+ (int day) { int rest = 0; if (day >= 0) { this->_day += day; while (this->_day > GetMonthDay(2016, 5)) { rest = this->_day - GetMonthDay(2016, 2); if (this->_month != 12) { this->_month++; } else { this->_year++; this->_month = 1; } this->_day = rest; } } else { Date operator - 50; } return *this; } //加天数,Date operator+= (int day); Date operator+= (int day ) { Date tmp(*this); tmp._day += day; int rest = 0; if (day > 0) { while (tmp._day > GetMonthDay(2016, 5)) { rest = tmp._day - GetMonthDay(2016, 2); if (tmp._month != 12) { tmp._month++; } else { tmp._year++; tmp._month = 1; } tmp._day = rest; } } else { Date operator-= 50; } return tmp; } //减天数,Date operator- (int day); Date operator - (int day) { int rest = 0; if (day <= 0) { this->_day -= day; while (this->_day > GetMonthDay(2016, 5)) { rest = this->_day - GetMonthDay(2016, 2); if (this->_month != 1) { this->_month--; } else { this->_year--; this->_month = 12; } this->_day = rest; } } else { Date operator + 50; } return *this; } //减天数,Date operator-= (int day); Date operator-= (int day) { int rest = 0; Date tmp(*this); if (day <= 0) { tmp._day -= day; while (tmp._day > GetMonthDay(2016, 5)) { rest = tmp._day - GetMonthDay(2016, 2); if (tmp._month != 1) { tmp._month--; } else { tmp._year--; tmp._month = 12; } tmp._day = rest; } } else { Date operator + 50; } return tmp; } //前置++ Date operator++() { if (day > GetMonthDay(int year, int month)) { if (month != 12) { ++this->day; } else { ++year; month = 1; day = 1; } } else { ++day; } return *this; } //后置++ Date operator++(int) { Date tmp(*this); tmp._day; if (day > GetMonthDay(int year, int month)) { if (month != 12) { ++tmp.day; } else { ++tmp.year; tmp.month = 1; tmp.day = 1; } } else { ++tmp.day; } return tmp; } //前置-- Date operator++() { if (day > GetMonthDay(int year, int month)) { if (month != 1) { ++this->day; } else { --year; month = 12; day = 1; } } else { --day; } return *this; } //后置-- Date operator--(int) { Date tmp(*this); tmp._day; if (day > GetMonthDay(int year, int month)) { if (month != 1) { --tmp.day; } else { --tmp.year; tmp.month = 12; tmp.day = 1; } } else { --tmp.day; } return tmp; } ~Date() { cout << "析构函数" << endl; } private: int _year; int _month; int _day; }; void Test1() { Date d; d.Display(); Date ret = operator + (50); } int main() { Test1(); system("pause"); return 0; }
C++【面试题】:类实现万年历(日期计算器),(含构造函数、拷贝构造、运算符重载、析构函数)
标签:c++【面试题】:类实现万年历(日期计算器) 拷贝构造 含构造函数 运算符重载 析构函数)
原文地址:http://10740184.blog.51cto.com/10730184/1736131