编写一个日期类,要求按xxxx-xx-xx 的格式输出日期,实现加一天的操作。
输入 输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。
输出 输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。
样例输入 2 1999 10 20 2001 1 31 样例输出 1999-10-21 2001-02-01 提示 注意个位数日期前面要有0。
class Date:Data类:
类属性的初始化和结构体struct有点类似,使用一个和类名同名的类方法(函数来进行类变量的初始化) 初始化的构造函数,不用指定变量类型; 需要注意的是:
- 类方法中的参数名不能和类变量名重复.
- 习惯上给类变量加上m_前缀或者_前缀或后缀
- 类方法也能接受外部变量的传入比如:month[13]的首地址
- 如果要在类定义同一文件上定义实现类的方法,需要加上inline
- inline Date::update( )
- 类的声明当中,private可以省略,C++默认类变量private
- 类对象(实例)声明时调用跟类名同名的构造函数Date date = Date(year, month, day, p)跟结构体的构造函数使用方法类似.还可以写的更紧凑Date data(year, month, day, p),p:将外部数组变量的手地址传给类方法.
类变量只能通过类方法来访问和修改,所以在类方法内使用形参完成变量的更新后,需要显式的赋值给类变量.
#include <iostream>
using namespace std;
class Date{
private:
int m_y;
int m_m;
int m_d;
public:
Date(int y = 0, int m = 0, int d = 0);
void update(int y,int m, int d, int *p);
void output();
};
inline Date::Date(int y, int m, int d) {
m_y = y;
m_m = m;
m_d = d;
}
inline void Date::update(int y, int m, int d, int *p) {
if (d < *(p+m)) d++;
else {
d = 1;
m++;
if (m == 13) {
m = 1;
y++;
}
}
m_y = y;
m_m = m;
m_d = d;
}
inline void Date::output() {
printf("%.4d-%.2d-%.2d\n",m_y,m_m,m_d);
}
int main() {
int month[13] = {0, 31, 28, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31};
int *p = month;
int y, m, d, N;
cin >>N;
while(N--) {
cin >>y >>m >>d;
Date date = Date(y, m, d);
date.update(y, m, d, p);
date.output();
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
int month[13] = {0, 31, 28, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31};
int y, m, d, N;
cin >>N;
while(N--) {
cin >>y >>m >>d;
if (d < month[m]) {
d++;
output(y, m , d);
}
else {
d = 1;
m++;
if (m == 13) {
m = 1;
y++;
}
printf("%.4d-%.2d-%.2d\n",y,m,d);
}
}
return 0;
}