Как смоделировать эту родительско-дочернюю иерархию в C ++?

Я хочу создать общий реферат TimePeriod учебный класс. Пример подклассов этого будет Day, Hour а также Minute,

Я также хочу создать общий TimeData класс, который связывает TimePeriod объект с некоторыми данными, такими как два doubles для самой низкой и самой высокой температуры в течение этого периода времени.

Создание тезисов Data Класс для этой цели не может быть плохой идеей. Так что TimeData будет ассоциировать TimePeriod с Data,

Вот пример того, как иерархия может выглядеть как w.r.t. время:

иерархия

В дополнение к «вертикальным» отношениям «родитель-ребенок» (когда я работаю с определенным часом, я хочу знать, в какой день этот час), я также хочу «горизонтальные» отношения, которые позволяют мне легко проходить через ежедневные данные, почасовые данные, минутные данные и т. д.

Можете ли вы дать мне идеи о том, как смоделировать это как классы в C ++? Нужно ли использовать указатели (в этом случае я бы предпочел умные указатели) или я могу использовать более простые vector, listи т.д. STL классы?

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
}
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]