第六周项目5——有元类
来源:互联网 发布:安卓手机安装windows 编辑:程序博客网 时间:2024/06/02 02:24
定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)
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类的私有数据成员
代码如下
#include <iostream>#include <cmath>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类的私有数据成员Time::Time(int h,int m,int s){ hour=h; minute=m; sec=s;}Date::Date(int m,int d,int y){ month=m; day=d; year=y;}int days(int m, int y); //days函数返回y年m月的天数void Time::add_a_second(Date &p){ sec=sec+1; if(sec>=60) { ++minute; sec=sec-60; } if(minute>=60) { ++hour; minute=minute-60; } if(hour>=24) { ++p.day; hour=hour-24; } if(p.day>days(p.month,p.year)) { ++p.month; p.day=1; } if(p.month>12) { ++p.year; p.month=p.month-12; }}void Time::display(Date &p){ cout<<p.month<<'/'<<p.day<<'/'<<p.year<<" "<<hour<<':'<<minute<<':'<<sec<<endl;}int days(int m,int y){ int p[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if((y%100==0&&y%4!=0)||(y%400==0)) p[2]=29; return p[m];}
将Date d1(12,31,2013)改为Date d1(2,28,2013)后
总结:开始编程时老是出现运行错误,看了解答后才知道需要一个一般函数days函数返回年,月。
0 0
- 第六周项目5——有元类
- 第六周—项目5 - 后缀表达式
- 第六周项目5—后缀表达式
- 第六周项目5—后缀表达式
- 第六周项目5—后缀表达式
- 第六周项目5
- 第六周上机实践项目5——友元类
- 第六周上机实践—项目5—后缀表达式
- 第六周上机实践项目5——后缀表达式
- 第六周实践项目5—后缀表达方式
- 第六周实践项目5—后缀表达式
- 第六周——项目五友元类
- 第六周项目五——友元类
- 第六周项目五——友元类
- 第六周项目1—常对象
- 第六周—项目4 - 数制转换
- 第六周项目二—数制转换
- 第六周项目4—数制转换
- 一台机器上启动多个Tomcat
- 第5周项目6-复数类模板
- 对 UIView 的 setNeedsLayout、 layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
- Android初学习 - EditText、TextView中文本的获取和设置
- 题目1 : 骨牌覆盖问题·一 (线性递推+矩阵快速幂)
- 第六周项目5——有元类
- 反射类入门学习
- C++线程锁封装
- 黑马程序员_日记51_泛型定义在接口上
- 模运算 NOJ 1037
- ERP系统应用效果表现在哪些方面
- PHP通过OpenSSL生成证书、密钥并且加密解密数据
- Poj3723 最大权森林
- ORACLE查询当前最早的事务的开始时间