08-静态函数与友元
题目描述
已知日期类Date,有属性:年、月、日,其他成员函数根据需要自行编写,注意该类没有输出的成员函数
已知时间类Time,有属性:时、分、秒,其他成员函数根据需要自行编写,注意该类没有输出的成员函数
现在编写一个全局函数把时间和日期的对象合并起来一起输出,
函数原型为:void Display(Date &, Time &)
函数输出要求为:
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、调用Print函数实现日期和时间的合并输出
输入
第一行输入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 timee;
class date
{
int year;
int month;
int day;
public:
date(int y,int m,int d)
{year=y;month=m;day=d;}
friend void display(date &,timee &);//友元函数
};
class timee
{
int hour;
int minute;
int second;
public:
timee(int h,int mm,int s)
{hour=h;minute=mm;second=s;}
friend void display(date &,timee &); //友元函数
};
void display(date &a,timee &b)//可以直接使用private内容
{
cout<<a.year<<"-";
cout<<setfill('0')<<setw(2)<<a.month<<"-";
cout<<setfill('0')<<setw(2)<<a.day<<" ";
cout<<setfill('0')<<setw(2)<<b.hour<<":";
cout<<setfill('0')<<setw(2)<<b.minute<<":";
cout<<setfill('0')<<setw(2)<<b.second<<endl;
/*
if(a.month<10) cout<<"0"<<a.month<<"-";
else cout<<a.month<<"-";
if(a.day<10) cout<<"0"<<a.day<<" ";
else cout<<a.day<<" ";
if(b.hour<10) cout<<"0"<<b.hour<<":";
else cout<<b.hour<<":";
if(b.minute<10) cout<<"0"<<b.minute<<":";
else cout<<b.minute<<":";
if(b.second<10) cout<<"0"<<b.second;
else cout<<b.second;
cout<<endl;
*/
}
int main()
{
int t;
cin>>t;
while(t--)
{
int y1,y2,m1,m2,d1,d2;
cin>>y1>>m1>>d1>>y2>>m2>>d2;
date a(y1,m1,d1);
timee b(y2,m2,d2);
display(a, b);
}
return 0;
}