设计一个日期类Date,重载运算符“<<”使之能够使用cout将日期类对象以日期的格式输出在Date类中验证日期的合法性 cout <<“当前日期已设置为” << a < endl; 运行结果:当前日期: 2023 15 6无效的日期!当期日期:2023 5 31当前日期已设置为2023年5月31日!
时间: 2024-03-13 22:44:59 浏览: 111
好的,下面是C++的Date类的实现代码:
```c++
#include <iostream>
#include <iomanip>
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;
}
friend ostream& operator<<(ostream& os, const Date& date) {
os << setfill('0') << setw(4) << date.year << "年"
<< setfill('0') << setw(2) << date.month << "月"
<< setfill('0') << setw(2) << date.day << "日";
return os;
}
bool isValid() {
if (year < 0 || month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return day <= 29;
} else {
return day <= 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return day <= 30;
} else {
return true;
}
}
void setDate(int y, int m, int d) {
year = y;
month = m;
day = d;
if (!isValid()) {
cout << "无效的日期!";
setDate(1970, 1, 1);
} else {
cout << "当前日期已设置为" << *this;
}
}
};
int main() {
Date a;
cout << "当前日期: " << a << endl;
a.setDate(2023, 15, 6);
cout << endl;
a.setDate(2023, 5, 31);
cout << endl;
return 0;
}
```
运行结果:
```
当前日期: 1970年01月01日
无效的日期!当前日期已设置为1970年01月01日!
当前日期已设置为2023年05月31日!
```
我们在Date类中重载了运算符“<<”,使用setfill()和setw()来设置输出格式,输出的日期格式为“年-月-日”。在setDate()函数中,我们也调用了isValid()函数来判断日期是否合法,并输出相应的信息。
阅读全文