第六周 项目五--友元函数

来源:互联网 发布:宝岛台湾知多少 编辑:程序博客网 时间:2024/04/29 07:16

问题及代码:

/**Copyright (c) 2015,烟台大学计算机学院*All rights reserved.*文件名称:test.cpp*作者:吴胜男*完成日期:2015年04月14日*版本号:v1.0**问题描述:定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)*输入描述:略*程序输出:略*/#include <iostream>using namespace std;class Date; //对Date类的提前引用声明class Time{public:    Time(int,int,int);    void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年    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;};int main( ){    Time t1(23,59,32);    Date d1(12,31,2013);   //测试时,再试试Date d1(2,28,2013)会如何    for(int i=0; i<=100; i++)    {        t1.add_a_second(d1);        t1.display(d1);    }    return 0;}//下面定义两个类中的成员函数,要求不得再增加成员函数//注意体会在Time的成员函数中可以调用Date类的私有数据成员Date::Date(int m,int d,int y){    month=m;    day=d;    year=y;}Time::Time(int h,int m,int s){    hour=h;    minute=m;    sec=s;}int days(int m,int y);//days函数返回y年m月的天数void Time::add_a_second(Date &d){    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;    }    if(d.month>12)    {        ++d.year;    d.month-=12;    }}void Time::display(Date&d){    cout<<d.year<<"年"<<d.month<<"月"<<d.day<<"日"<<endl;    cout<<hour<<":"<<minute<<":"<<sec<<endl;}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];}

运行结果:

问题及代码:

/**Copyright (c) 2015,烟台大学计算机学院*All rights reserved.*文件名称:test.cpp*作者:吴胜男*完成日期:2015年04月14日*版本号:v1.0**问题描述:定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)*输入描述:略*程序输出:略*/#include <iostream>using namespace std;class Date; //对Date类的提前引用声明class Time{public:    Time(int,int,int);    void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年    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;};int main( ){    Time t1(23,59,32);    Date d1(2,28,2013);   //测试时,再试试Date d1(2,28,2013)会如何    for(int i=0; i<=100; i++)    {        t1.add_a_second(d1);        t1.display(d1);    }    return 0;}//下面定义两个类中的成员函数,要求不得再增加成员函数//注意体会在Time的成员函数中可以调用Date类的私有数据成员Date::Date(int m,int d,int y){    month=m;    day=d;    year=y;}Time::Time(int h,int m,int s){    hour=h;    minute=m;    sec=s;}int days(int m,int y);//days函数返回y年m月的天数void Time::add_a_second(Date &d){    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;    }    if(d.month>12)    {        ++d.year;    d.month-=12;    }}void Time::display(Date&d){    cout<<d.year<<"年"<<d.month<<"月"<<d.day<<"日"<<endl;    cout<<hour<<":"<<minute<<":"<<sec<<endl;}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];}


运行结果:

知识点总结:又增加了一个函数days来返回y年m月的天数。在add_a_second函数中if语句的使用。

学习心得:很多看似很复杂的问题往往运用最基础的知识点就能被解决。if 语句。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机呼叫号码呼叫失败怎么办 好友把我拉黑了怎么办 有人一直打骚扰电话怎么办 每天都有骚扰电话怎么办 苹果7被电话轰炸怎么办 苹果手机接听声音小怎么办 微信账号封了怎么办 在京东买的手机出现问题怎么办 销售没胆量扫楼怎么办 骨龄比实际年龄小怎么办 身体年龄比实际年龄大怎么办 吃了不熟的鸡蛋怎么办 六角龙尾巴烂了怎么办 兰花长出来的包怎么办 长寿花花开败了怎么办 手机分期0首付怎么办办 办分期手机掉了怎么办 手机办分期被骗了怎么办 办手机分期年龄不够怎么办 信美分期没额度怎么办 家里人不给我钱怎么办 商场租金收不上来怎么办 魅蓝2电池坏了怎么办 格力空调不制冷怎么办 空调外机不好放怎么办 美的空调显示e3怎么办 发现安装空调条码被撕怎么办 删除了国美安装码怎么办 海信空调保修卡丢了怎么办 海尔空调保修卡丢了怎么办 科龙空调不制冷怎么办 魅族s6屏幕碎了怎么办 格力空调化霜怎么办 一开空调就跳闸怎么办 洗衣机顶盖的安全开关损坏怎么办 苹果平板电脑拍照坏了怎么办 苹果hom键不灵了怎么办 平板电脑home键发烫怎么办 华为平板无法输入资料怎么办 安卓平板没声音怎么办? 平果手机充不了电怎么办