2013-04-30 116 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