/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:呼亚萍
* 完成日期:2015年4月15日
* 版 本 号:v1.0
*
* 问题描述:定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)
* 程序输入:相应的程序
* 程序输出:对应得结果
*/
#include <iostream>
using namespace std;
class Date;
class Time
{
public:
Time(int,int,int);
void add_a_second(Date &);
void display(Date &);
private:
int hour;
int minute;
int sec;
};
class Date
{
public:
Date(int,int,int);
friend class Time;//Time为Date的友元类
private:
int month;
int day;
int year;
};
Time::Time(int x,int y,int z)
{
hour=x;
minute=y;
sec=z;
}
Date::Date(int x,int y,int z)
{
month=x;
day=y;
year=z;
}
int days(int m,int y);
void Time::add_a_second(Date &d)
{
sec++;
if(sec>=60)
{
minute++;
sec-=60;
}
if(minute>=60)
{
hour++;
minute-=60;
}
if(hour>=24)
{
d.day++;
hour-=24;
}
if(d.day>days(d.month,d.year))
{
d.month++;
d.day=1;
}
}
int days(int m, int y) //days函数返回y年m月的天数
{
int d[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
if((y%100==0&&y%4!=0)||(y%400==0)) d[2]=29;
return d[m];
}
void Time::display (Date &d)
{
cout<<d.year<<"年"<<d.month<<"月"<<d.day<<"日"<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main()
{
Time t1(23,59,32);
Date d1(12,31,2013);
for(int i=0; i<=100; i++)
{
t1.add_a_second(d1);
t1.display(d1);
}
return 0;
}
运算结果:
知识点总结;
友元类的使用,另一个类中调用友元函数时需要加对象名
学习心得;
自己的方法总有一些欠缺考虑的地方,跟老师的比较发现自己的不总,继续努力,加油!