第6周项目5-友元类
来源:互联网 发布:樱井知香2017作品番号 编辑:程序博客网 时间:2024/05/21 10:29
/* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2015年 4 月 12 日 * 版 本 号:v1.0 * * 问题描述: 定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)。 * 输入描述:NULL; * 程序输出:按要求输出。
代码如下:
#include <iostream>using namespace std;class Date;int days(int m,int y);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){ hour=h; minute=m; sec=s;}void Time::add_a_second(Date &p){ sec+=1; if (sec>=60) { ++minute; sec-=60; } if (minute>=60) { ++hour; minute-=60; } if (hour>=24) { ++p.day; hour-=24; } if (p.day>days(p.month,p.year)) { ++p.month; p.day=1; } if (p.month>12) { ++p.year; p.month-=12; }}void Time::display(Date &p){ cout<<p.month<<'/'<<p.day<<'/'<<p.year<<' '<<hour<<':'<<minute<<':'<<sec<<endl;}Date::Date(int m,int d,int y){ month=m; day=d; year=y;}int days(int m,int y){ 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];}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;}
运行结果:
将Date d1(12,31,2013)改为Date d1(2,28,2013)后
运行结果如下:
知识点总结:
友元类的应用,一个类的友元类可以调用这个类中的数据成员,虽然友元类提高了程序的效率,但是破坏了类的封装性。
1 0
- 第6周项目5-友元类
- 2015-第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 - 后缀表达式
- SQL server经验分享:SQLSERVER 被标记为“可疑”的数据库处理方法
- ACM 模板--邻接表 无向图 搜索算法
- 第六周项目1-深复制体验(3-复制构造函数)
- Android开发--IntentService的用法,你错过了什么
- 使用链接服务器执行远程数据库上的存储过程
- 第6周项目5-友元类
- 多线程同步队列实现
- Unity shader(CG) 写一个海浪纹理多种效果
- 该伙伴事务管理器已经禁止了它对远程/网络事务的支持
- php读取文件内容
- 各种对齐的属性
- SET XACT_ABORT各种用法及显示结果
- FATAL ERROR in native method: JDWP No Transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_IN,ec
- ACM 模板--邻接表 有向图 搜索算法