【C++OJ_静态与友元】日期时间合并输出(友元函数)
题目描述
已知日期类CDate,有属性:年、月、日,其他成员函数根据需要自行编写,注意该类没有输出的成员函数
已知时间类CTime,有属性:时、分、秒,其他成员函数根据需要自行编写,注意该类没有输出的成员函数
现在编写一个全局函数把时间和日期的对象合并起来一起输出,
函数原型为:void Display(CDate &, CTime &)
函数输出要求为:
1、时分秒输出长度固定2位,不足2位补0
2、年份输出长度固定为4位,月和日的输出长度固定2位,不足2位补0
例如2017年3月3日19时5分18秒
则输出为:2017-03-03 19:05:18
程序要求
1、把函数Display作为时间类、日期类的友元
2、分别创建一个日期对象和时间对象,保存日期的输入和时间的输入
3、调用Display函数实现日期和时间的合并输出
输入
第一行输入t表示有t组示例
接着一行输入三个整数,表示年月日
再接着一行输入三个整数,表示时分秒
依次输入t组示例
输出
每行输出一个日期和时间合并输出结果
输出t行
输入样例
2
2017 3 3
19 5 18
1988 12 8
5 16 4
输出样例
2017-03-03 19:05:18
1988-12-08 05:16:04
参考代码
#include <iostream>
#include <iomanip>
using namespace std;
class CTime; //需要先声明,会提前调用到
class CDate //日期类
{
int y, m, d; //属性:年、月、日
public:
CDate(int yy, int mm, int dd) : y(yy), m(mm), d(dd) {} //构造函数
friend void Display(CDate &CDate, CTime &CTime); //注意该类没有输出的成员函数,通过友元调用全局函数
};
class CTime
{
int h, min, s; // 属性:时、分、秒
public:
CTime(int hh, int minmin, int ss) : h(hh), min(minmin), s(ss) {} //构造函数
friend void Display(CDate &CDate, CTime &CTime); //注意该类没有输出的成员函数,通过友元调用全局函数
};
void Display(CDate &CDate, CTime &CTime) //全局函数:把时间和日期的对象合并起来一起输出
{
//年份输出长度固定为4位,月和日的输出长度固定2位,不足2位补0
cout << setw(4) << setfill('0') << CDate.y << '-';
cout << setw(2) << setfill('0') << CDate.m << '-';
cout << setw(2) << setfill('0') << CDate.d;
cout << " ";
//时分秒输出长度固定2位,不足2位补0
cout << setw(2) << setfill('0') << CTime.h << ':' << setw(2) << setfill('0') << CTime.min << ':' << setw(2) << setfill('0') << CTime.s;
}
int main()
{
int t;
cin >> t;
while (t--)
{
int y, m, d, h, min, s;
cin >> y >> m >> d >> h >> min >> s;
//分别创建一个日期对象和时间对象,保存日期的输入和时间的输入
CDate CDate(y, m, d);
CTime CTime(h, min, s);
//把函数Display作为时间类、日期类的友元
//调用Display函数实现日期和时间的合并输出
Display(CDate, CTime);
cout << endl;
}
return 0;
}