2013-04-30 82 views
1

我想創建一個通用的摘要TimePeriod類。它的示例子類將是Day,HourMinute如何在C++中建模這個父子層次結構?

我還希望創建一般TimeData類與一些數據的對象TimePeriod相關聯,諸如兩個double S代表在該時間段的最低和最高溫度。

爲此目的創建一個抽象Data類可能不是一個壞主意。因此TimeData會將TimePeriodData關聯。

下面是一個示例,該層次結構如何看起來像w.r.t.時間:

hierarchy

除了「垂直的」父子關係(當我有一定小時的工作,我想知道是時間在一天),我也想「水平「關係,讓我可以輕鬆地循環訪問每日數據,每小時數據,分鐘數據等。

你可以給我一些關於如何將它建模爲C++類的想法嗎?我是否需要使用指針(在這種情況下,我更喜歡智能指針),還是可以使用更簡單的vectorlist等STL類?

+0

爲什麼不使用C++ 11的'time_point's? – jt234 2013-04-30 13:48:46

+0

查看[Boost.Units](http://www.boost.org/doc/libs/1_38_0/doc/html/boost_units/Units.html) – 2013-04-30 13:53:48

+0

使用'#include < ctime >'?查看詳情[here](http://www.tutorialspoint.com/cplusplus/cpp_date_time.htm),或者您可以查看'std :: chrono'。 – Mushy 2013-04-30 13:55:08

回答

1

您可以將結構更改爲類。我真的不明白你爲什麼要將TimePeriod定義爲抽象。另外我會建議製作一個TimePeriod類型的鏈表。列表中的每個項目都會通過next指針指向下一個時間段項目。

struct TimeData 
{ 
    int minTemp; 
    int maxTemp; 

    public int setData(int minTemp,int maxTemp) 
    { 
    } 
} 

struct TimePeriod 
{ 
    Day d;//this is kinda redundant as it only contains one day 
    TimeData td; 
    TimePeriod *next;//to point to next TimePeriod object in the list 
}; 

struct day 
{ 
    int d; 
    Hour h[24]; 
    TimeData td; 
    int setTimeData() 
    { 
     //cycle through hour timedata and calculate avg or whatever you want 
    } 
}; 
struct Hour 
{ 
    int h; 
    Min m[60]; 
    TimeData td; 
    int setTimeData() 
    { 
     //cycle through min timedata and calculate avg or whatever you want 
    } 

}; 
struct Min 
{ 
    int m; 
    TimeData td; 
    int setTimeData(int minTemp,int maxTemp) 
    { 
     //set TimeData td 
    } 
}; 
+0

您可以將所有變量設置爲私有,但設置私有成員函數的函數必須始終公開。 – thunderbird 2013-05-03 11:58:28

+0

他們都是公開的。它們是'struct',成員默認是公共的。 – 2015-11-20 19:47:27