第七周上机实践项目 项目2-友元类

来源:互联网 发布:mysql中nvl函数用法 编辑:程序博客网 时间:2024/05/17 04:36

问题及代码:

    定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)

    class Date; //对Date类的提前引用声明  02.class Time  03.{  04.public:  05.    Time(int,int,int);  06.    void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年  07.    void display(Date &);  //显示时间,格式:月/日/年 时:分:秒  08.private:  09.    int hour;  10.    int minute;  11.    int sec;  12.};  13.  14.  15.class Date  16.{  17.public:  18.    Date(int,int,int);  19.    friend class Time; //Time为Date的友元类  20.private:  21.    int month;  22.    int day;  23.    int year;  24.};  25.  26.int main( )  27.{  28.    Time t1(23,59,32);  29.    Date d1(12,31,2013);   //测试时,再试试Date d1(2,28,2013)会如何  30.    for(int i=0; i<=100; i++)  31.    {  32.        t1.add_a_second(d1);  33.        t1.display(d1);  34.    }  35.    return 0;  36.}  37.//下面定义两个类中的成员函数,要求不得再增加成员函数  38.//注意体会在Time的成员函数中可以调用Date类的私有数据成员     

    答案:

    /* Copyright(c)2016,烟台大学计算机与控制工程学院 All rights reserced 文件名称:test.cpp 作    者:蔡汝佳 完成日期:2016年4月21日 版 本 号:v1.0 问题描述:定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好) 输入描述: 程序输出:*/#include <iostream>#include<cmath>using namespace std;class Date{public:    Date(int,int,int);    friend class Time; //Time为Date的友元类private:    int month;    int day;    int year;};class Time{public:    Time(int,int,int);    void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年    void display(Date &);  //显示时间,格式:月/日/年 时:分:秒private:    int hour;    int minute;    int sec;};Time::Time(int h,int m,int s){    hour=h;    minute=m;    sec=s;}void Time::display(Date &d){    cout<<d.year<<"年"<<d.month<<"月"<<d.day<<"日"<<hour<<"时"<<minute<<"分"<<sec<<"秒"<<endl;}void Time::add_a_second(Date &d){    sec++;    if(sec==60)    {         minute++;         sec=0;    }    if(minute==60)    {        hour++;        minute=0;    }    if(hour==24)    {        d.day++;        hour=0;    }    if((d.year%4==0&&d.year%100!=0)||d.year%400==0)    {        switch(d.month)        {            case 2:            if(d.day==30)            {                d.day=1;                d.month++;            }            break;        case 1:        case 3:        case 5:        case 7:        case 8:        case 10:        case 12:            if(d.day==32)            {                d.day=1;                d.month++;                if(d.month==13)                {                        d.year++;                        d.month=1;                }            }            break;        case 4:        case 6:        case 9:        case 11:            if(d.day==31)            {                d.day=1;                d.month++;            }            break;        }    }    else    {        switch(d.month)        {            case 2:            if(d.day==29)            {                d.day=1;                d.month++;            }            break;        case 1:        case 3:        case 5:        case 7:        case 8:        case 10:        case 12:            if(d.day==32)            {                d.day=1;                d.month++;                if(d.month==13)                {                        d.year++;                        d.month=1;                }            }            break;        case 4:        case 6:        case 9:        case 11:            if(d.day==31)            {                d.day=1;                d.month++;            }        break;        }    }}Date::Date(int m,int d,int y){    month= m;    day=d;    year=y;}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;}


运行结果:

知识点总结:


学习心得:


0 0
原创粉丝点击