2015級C++第7周項目 友元、共享數據保護、多文件結構
阿新 • • 發佈:2017-07-30
執行 pub 程序 block tails 一個 date類 能夠 tracking
【項目1-成員函數、友元函數和一般函數有差別】參考解答
(1)閱讀以下的程序,體會凝視中的說明(要執行程序,請找到課程主頁並復制代碼)
//例:使用成員函數、友元函數和一般函數的差別
#include <iostream>
using namespace std;
class Time
{
public:
Time(int h,int m,int s):hour(h),minute(m),sec(s) {}
void display1(); //display1是成員函數
friend void display2(Time &); //display2是友元函數
int getHour(){return hour;}
int getMinute(){return minute;}
int getSec(){return sec;}
private:
int hour;
int minute;
int sec;
};
void Time::display1() //成員函數display1的實現,dispaly1前加Time::
{
//以hour形式直接訪問私有數據成員,實質是this->hour形式
cout<<hour<<":"<<minute<<":" <<sec<<endl;
}
void display2(Time &t) //友元函數dispaly2的實現,不加Time::,友元並非類的成員
{
//盡管不是類的成員函數。卻能夠用t.hour的形式直接訪問私有數據成員——這就是友元
cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
void display3(Time &t) //display3是一般函數,dispaly3前不加Time::
{
//不能直接訪問。僅僅能用公共接口t.getHour()形式訪問私有數據成員
cout<<t.getHour()<<":"<<t.getMinute()<<":"<<t.getSec()<<endl;
}
int main()
{
Time t1(10,13,56);
t1.display1(); //成員函數這樣調用:對象名.函數名()
display2(t1); //友員函數的調用和一般函數無異(但實現中能夠不同)
display3(t1); //一般函數的調用
return 0;
}
(2)模仿上面的演示樣例,完畢求點類中距離的任務。你須要實現求距離函數的三種版本號:分別利用成員函數、友元函數和一般函數求兩點間距離的函數,並設計main()函數完畢測試。
提示:此項目和樣例的差別在於“距離是一個點和另外一個點的距離”,不同版本號在參數上有體現。三個版本號建議分開測試,也能夠如演示樣例,放在一個程序中完畢。
以下是點類的部分代碼。
class CPoint
{
private:
double x; // 橫坐標
double y; // 縱坐標
public:
CPoint(double xx=0,double yy=0):x(xx),y(yy){}
……//請繼續寫須要的代碼
};
【項目2-友元類】 參考解答
定義以下兩個類的成員函數(為體驗友元類,實際上本例並不一定是一個好的設計。將兩個類的合並為一個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類的私有數據成員
【項目3-用多文件組織多個類的程序】 參考解答
將上一周“項目2-帶武器的遊戲角色”用“一個項目多個文件”的方式實現,當中兩個類的聲明放在一個.h文件裏,每一個類的成員函數分別放一個文件。main()函數用一個文件。體會這樣安排的長處。
2015級C++第7周項目 友元、共享數據保護、多文件結構