#c #arrays #class #constructor
#c #массивы #класс #конструктор
Вопрос:
class Time {
private:
int hour = 0;
int minute = 0;
public:
Time(int hour, int minute);
void setHour(int hour);
void setMinute(int minute);
int getHour();
int getMinute();
void print();
void advance();
};
Time::Time(int h, int m) // DONE
{
hour = h;
minute = m;
if (hour > 23)
{
hour = 0;
}
if (minute > 59)
{
minute = 0;
}
}
void Time::setHour(int h) // DONE
{
if (h > 23)
{
hour = 0;
}
else
{
hour = h;
}
}
void Time::setMinute(int m) // DONE
{
if (m > 59)
{
minute = 0;
}
else
{
minute = m;
}
}
int Time::getHour() // DONE
{
return hour;
}
int Time::getMinute() // DONE
{
return minute;
}
void Time::print() // DONE
{
string period;
string minutezero;
if (hour > 12)
{
hour = hour - 12;
period = "PM";
}
else if (hour < 13)
{
period = "AM";
}
if (hour == 0)
{
hour = 12;
period = "AM";
}
if (minute < 10)
{
cout << hour << ":" << "0" << minute << " " << period;
}
else if (minute > 9)
{
cout << hour << ":" << minute << " " << period;
}
}
void Time::advance() // DONE
{
minute = minute 1;
if (minute == 60)
{
minute = 0;
hour = hour 1;
}
if (hour == 24)
{
hour = 0;
}
}
В моей функции int main я хотел бы создать массив, подобный
Время t [5], которое будет содержать 5 временных объектов. Как бы я это закодировал?
Вот что говорит мой модуль слово в слово:
** Измените класс Time, чтобы настроить конструкторы, чтобы в драйвере можно было создавать следующие объекты Time. Настройте временной массив, как указано ниже, и также распечатайте время в драйвере (можно добавить в обычную версию и отправить одну версию).
Время t1; // час: 0, минута: 0, 12:00
Время t2(8); // час: 8, минута: 0, 8:00 утра
Время t3(13, 30); // час: 13, минута: 30, 1:30 вечера
Время t4(25, 5); // час: 0, минута: 5, 12:05
Время t4(12, 60); // час: 12, минута: 0, 12:00 PMI**
Комментарии:
1. Вашему
Time
классу нужен конструктор по умолчанию. В настоящее время у него есть только конструктор, который принимает два параметра. Я предлагаю вам создать другой конструктор, который не принимает параметров и просто инициализирует свои элементы нулем.2. На самом деле, при чтении последующих требований кажется, что вам также нужно поддерживать построение только часом. В этом случае вам может сойти с рук объявление значений параметров по умолчанию для существующего конструктора.
3. подождите .. исходное требование предполагает, что в день было 25 часов? lol (24 часа в сутки: 24 == 0)
Ответ №1:
Как указал Пэдди в комментарии, вам нужен конструктор по умолчанию, который выглядел бы примерно так:
Time::Time() : hour(0), minute(0) { }
И вам также нужен конструктор только с часом в качестве параметра
Time::Time(int h) : hour(h), minute(0) {
if (hour > 23) hour = 0;
}
После этого ваш класс будет выглядеть примерно так
public:
Time();
Time(int h);
Time(int hour, int minute);
void setHour(int hour);
...
Ответ №2:
Например
#include <algorithm>
#include <vector>
#include <iterator>
int main(){
std::vector<Time> t;
std::fill_n(std::back_inserter(t), 5, Time(0, 0));
}
Или использовать указатели
std::array<std::unique_ptr<Time>, 5> t; // std::unique_ptr<Time> t[5];
В соответствии с требованием Time t1; // hour: 0, minute: 0, 12:00 AM
вы должны добавить и реализовать конструктор по умолчанию Time::Time()
, или еще лучше, если вы создадите только один Time::Time(int hour = 0, int minute = 0)
со значениями параметров по умолчанию.
Небольшое обновление:
class Time {
private:
int hour = 0;
int minute = 0;
public:
Time(int hour = 0, int minute = 0);
// skipped