《C++语言基础》实践参考——友元类
生活随笔
收集整理的這篇文章主要介紹了
《C++语言基础》实践参考——友元类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
返回:賀老師課程教學鏈接
【項目5-友元類】
定義下面兩個類的成員函數(為體驗友元類,實際上本例并不一定是一個好的設計,將兩個類的合并為一個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> 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(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 &d) {if(++sec>=60) ++minute,sec-=60;if(minute>=60) ++hour,minute-=60;if(hour>=24) ++d.day,hour-=24;if(d.day>days(d.month,d.year)) ++d.month,d.day=1;if(d.month>12) ++d.year,d.month-=12; } void Time::display(Date &d) {cout<<d.year<<"年"<<d.month<<"月"<<d.day<<"日";cout<<hour<<":"<<minute<<":"<<sec<<endl; }int days(int m, int y) //days函數返回y年m月的天數 {int d[]={0,31,28,31,30,31,30,31,31,30,31,30,31};if((y%4==0&&y%100!=0)||(y%400==0)) d[2]=29;return d[m]; }
總結
以上是生活随笔為你收集整理的《C++语言基础》实践参考——友元类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何改造现有文件为 CMD 模块
- 下一篇: Android 创建,删除,检测桌面快