友元类


  1. /* 
  2.  *Copyright(c)2016,烟台大学计算机与控制工程学院 
  3.  *All rights reserved 
  4.  *文件名称:123.cpp 
  5.  *作    者:隋宗涛
  6.  *完成日期:2016年5月9日 
  7.  *版 本 号:v1.0 
  8.  * 
  9.  *问题描述:定义下面两个类的成员函数。 
  10. */  
  11.   
  12. #include<iostream>  
  13. using namespace std;  
  14. class Date; //对Date类的提前引用声明  
  15. class Time  
  16. {  
  17. public:  
  18.     Time(int,int,int);  
  19.     void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年  
  20.     void display(Date &);  //显示时间,格式:月/日/年 时:分:秒  
  21. private:  
  22.     int hour;  
  23.     int minute;  
  24.     int sec;  
  25. };  
  26. class Date  
  27. {  
  28. public:  
  29.     Date(int,int,int);  
  30.     friend class Time; //Time为Date的友元类  
  31. private:  
  32.     int month;  
  33.     int day;  
  34.     int year;  
  35. };  
  36. int main()  
  37. {  
  38.     Time t1(23,59,32);  
  39.     Date d1(12,31,2013);   //测试时,再试试Date d1(2,28,2013)会如何  
  40.     for(int i=0; i<=100; i++)  
  41.     {  
  42.         t1.add_a_second(d1);  
  43.         t1.display(d1);  
  44.     }  
  45.     return 0;  
  46. }  
  47. //下面定义两个类中的成员函数,要求不得再增加成员函数  
  48. //注意体会在Time的成员函数中可以调用Date类的私有数据成员  
  49. Time::Time(int h,int m,int s)  
  50. {  
  51.     hour=h;  
  52.     minute=m;  
  53.     sec=s;  
  54. }  
  55. int days(int m, int y);  
  56. void Time::add_a_second(Date &d1)  
  57. {  
  58.     if(++sec>=60) minute++,sec=sec-60;  
  59.     if(minute>=60) hour++,minute=minute-60;  
  60.     if(hour>=24) d1.day++,hour=hour-24;  
  61.     if(d1.day>days(d1.month,d1.year)) d1.month++,d1.day=1;  
  62.     if(d1.month>12) d1.year++,d1.month=d1.month-12;  
  63. }  
  64. void Time::display(Date &d1)  
  65. {  
  66.     cout<<d1.year<<"年"<<d1.month<<"月"<<d1.day<<"日";  
  67.     cout<<hour<<":"<<minute<<":"<<sec<<endl;  
  68. }  
  69. Date::Date(int m,int d,int y)  
  70. {  
  71.     month=m;  
  72.     day=d;  
  73.     year=y;  
  74. }  
  75. int days(int m, int y)  
  76. {  
  77.     int d;  
  78.     switch(m)  
  79.     {  
  80.         case 4:  
  81.         case 6:  
  82.         case 9:  
  83.         case 11:  
  84.             d=30;  
  85.             break;  
  86.         case 1:  
  87.         case 3:  
  88.         case 5:  
  89.         case 7:  
  90.         case 8:  
  91.         case 10:  
  92.         case 12:  
  93.             d=31;  
  94.             break;  
  95.         case 2:  
  96.                 if(y%4==0&&y%100!=0||y%400==0)  
  97.                 {  
  98.                     d=29;  
  99.                     break;  
  100.                 }  
  101.                 else  
  102.                     d=28;  
  103.                     break;  
  104.     }  
  105.     return d;  
  106. }  
运行结果:
2013.12.31
友元类_第1张图片
2013.2.28
友元类_第2张图片

你可能感兴趣的:(友元类)