【问题标题】:How to model this parent-child hierarchy in C++?如何在 C++ 中建模这个父子层次结构?
【发布时间】:2013-04-30 13:44:43
【问题描述】:

我想创建一个通用抽象TimePeriod 类。它的示例子类是DayHourMinute

我还想创建一个通用的TimeData 类,将TimePeriod 对象与一些数据相关联,例如两个doubles 用于该时间段内的最低和最高温度。

为此目的创建一个抽象的Data 类可能不是一个坏主意。所以TimeData 会将TimePeriodData 关联起来。

这是一个层次结构如何看起来像 w.r.t 的示例。时间:

除了“垂直”的父子关系(当我在某个时间工作时,我想知道那个时间在哪一天),我还想要让我轻松循环的“水平”关系通过每日数据、每小时数据、分钟数据等。

您能告诉我如何在 C++ 中将其建模为类吗?我需要使用指针(在这种情况下我更喜欢智能指针)还是可以使用更简单的vectorlist 等 STL 类?

【问题讨论】:

  • 为什么不用c++11的time_points?
  • 看看Boost.Units
  • 使用#include < ctime >?查看详细信息here 或者您可以查看std::chrono
  • 我当然可以使用其中的一些来表示实际时间,但区分各种“父子”时间粒度(天、小时、分钟等)的数据仍然很重要.有时我可能需要现在这一天的最低温度,或者那个小时/分钟内的最高温度,等等。

标签: c++ oop data-modeling abstract-data-type


【解决方案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
    }
};

【讨论】:

  • 您可以将所有变量设为私有,但设置私有成员函数的函数必须始终是公开的。
  • 它们都是公开的。他们是struct,成员默认是公开的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多