1. 程式人生 > >2015級C++第7周項目 友元、共享數據保護、多文件結構

2015級C++第7周項目 友元、共享數據保護、多文件結構

執行 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周項目 友元、共享數據保護、多文件結構