2015-第6周项目5-友元类
来源:互联网 发布:mac版本魔兽世界插件 编辑:程序博客网 时间:2024/06/06 01:07
【项目5-友元类】
定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)
代码:
#include <iostream>#include <cstring>using namespace std;int day(int m,int y){ int d[13]={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]++; return d[m];}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;};Time::Time(int h,int m,int s){ minute=m; hour=h; sec=s;}Date::Date(int m,int d,int y){ month=m; day=d; year=y;}void Time::add_a_second(Date &b){ sec++; if(sec>=60) minute++,sec-=60; if(minute>=60) hour++,minute-=60; if(hour>=24) b.day++,hour-=24; if(b.day>day(b.month,b.year)) b.month++,b.day=1; if(b.month > 12) b.year++,b.month-=12;}void Time::display(Date &b){ cout<<b.year<<"年"<<b.month<<"月"<<b.day<<"日"; cout<<hour<<":"<<minute<<":"<<sec<<endl;}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
- 2015-第6周项目5-友元类
- 第6周项目5-友元类
- 第6周项目5-友元类
- 第6周项目5友元类
- 第6周项目5-友元类
- 第6周项目5
- 第6周项目
- 第6周项目5-友元类-时间类
- 第6周项目5——友元类
- 第5周项目5-友元类
- 第6周项目2 武器友元类
- 第9周项目6(5)-解奥数题
- 第6周项目-程序阅读5
- 第6周项目5-后缀表达式
- 第6周项目5-后缀表达式
- 第6周 项目5-后缀表达式
- 第6周项目5 - 后缀表达式
- 第6周 项目5 - 后缀表达式
- android与js交互
- 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
- Java深度历险(二)——Java类的加载、链接和初始化
- 解决gdb调试报错“No symbol table is loaded. Use the "file" command.”
- ios8.0下CLLocationManager定位服务需要授权了
- 2015-第6周项目5-友元类
- Java深度历险(三)——Java线程:基本概念、可见性与同步
- Using INSTEAD OF triggers in SQL Server for DML operations
- iOS多线程/并行开发
- 操作系统复习
- Microsoft visual Studio 2010 下 DirectX SDK 安装配置详细过程
- 孙其功陪你学之——如何将shell命令的返回值赋值给应用程序的变量
- doxygen 初次使用尝试
- 财政部采购系统运维服务