c++,设计一个日期类,重载运算符"<<",实质能够使用cout将日期类对象以日期的格式输出。在Date类中验证日期的合法性,cout<<“当前日期已设置为”<< a << endl;
时间: 2023-08-20 11:40:13 浏览: 93
好的,下面是代码实现:
```cpp
#include <iostream>
using namespace std;
class Date {
private:
int year, month, day;
public:
Date(int y = 1970, int m = 1, int d = 1) {
year = y;
month = m;
day = d;
}
bool is_valid() {
if (year < 1970 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
if (day > 29) {
return false;
}
} else {
if (day > 28) {
return false;
}
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
return false;
}
}
return true;
}
friend ostream& operator<< (ostream& os, const Date& date) {
if (date.is_valid()) {
os << date.year << "-" << date.month << "-" << date.day;
} else {
os << "Invalid date";
}
return os;
}
};
int main() {
Date a(2021, 10, 31);
cout << "当前日期已设置为:" << a << endl;
return 0;
}
```
Date 类中的 is_valid() 函数验证了日期的合法性,遵循了一些基本规则:
- 年份必须大于等于 1970 年,小于等于 9999 年;
- 月份必须在 1 到 12 之间;
- 日必须在 1 到 31 之间;
- 对于闰年的 2 月份,天数不能超过 29 天;
- 对于平年的 2 月份,天数不能超过 28 天;
- 对于 4、6、9、11 月份,天数不能超过 30 天。
在主函数中,我们创建了一个 Date 类型的对象 a,然后通过 cout 输出 a,会自动调用重载的 << 运算符,将 a 按照日期格式输出。
输出结果如下:
```
当前日期已设置为:2021-10-31
```
需要注意的是,为了保证代码的简洁性,本实现并没有考虑诸如闰年计算、月份天数等问题的高效算法,只是通过简单的 if 判断来实现日期合法性的验证。在实际的开发中,我们需要更加精确地计算日期,同时考虑到性能等问题。
阅读全文