Мне трудно определить, как решить часть проблемы, которую я делаю для своего курса C ++.Эта часть требует использования перегрузки оператора для правильного увеличения дней и месяца.Может быть, я упускаю из виду очень простую математику, но почему-то я немного смущен тем, как.Вот код, который у меня есть для моих перегруженных операторов префикса и постфикса для DayOfYear
объектов:
//Operators
DayOfYear operator++ () {return day++; }
DayOfYear operator++ (int) {return ++day;}
DayOfYear operator-- () {return day--;}
DayOfYear operator-- (int) {return --day;}
Очевидно, что это избыточно, потому что day
является int
, поэтому он делает только то, что я уже могсделайте с ++
и --
для начала.Ниже приведен код для класса DayOfYear
:
class DayOfYear {
std::string month[12] = {"January", "February", "March",
"April", "May", "June", "July", "August",
"September", "October", "November", "December"};
//Each month's number of days, respectively
int numDaysMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day;
//Convert day # to a string value
static std::string dayToStr;
public:
//First constructor
DayOfYear (int day) {this -> day = day;}
//Second Constructor
DayOfYear (std::string mth, int dayOfMonth) {
//Make sure the dayOfMonth is valid
if (dayOfMonth > 31 || dayOfMonth < 1) {
if (mth == "February" && dayOfMonth > 28) {
std::cout << "Invalid day. February is assumed to be 28
days for our purposes." << std::endl;
} else if ((mth == "April" || mth == "June" || mth ==
"September" || mth == "November") && dayOfMonth > 30) {
std::cout << "Invalid day. " << mth << " has only 30
days." << std::endl;
} else {
std::cout << "Invalid day. The day should be >0 and <=31
for most months." << std::endl;
}
} else {
day = dayOfMonth;
}
}
//Accessors
std::string getMonth (int mID) {return month[mID];}
std::string getDay () {return dayToStr;}
//Mutators
void setDay (int d) {
day = d;
}
//Operators
DayOfYear operator++ () {return day++; }
DayOfYear operator++ (int) {return ++day;}
DayOfYear operator-- () {return day--;}
DayOfYear operator-- (int) {return --day;}
void print () {
//TO-DO
}
};
В данный момент код не будет компилироваться, потому что фрагменты еще не все.Тем не менее, я думаю, что я могу читать код довольно хорошо, поэтому я знаю, что мои операторы не будут работать.Каким-то образом мне нужно выяснить, как сделать этот код, чтобы моя main
функция (ниже) могла правильно скомпилироваться и работать:
int main () {
DayOfYear d (2);
d.print ();
d = 365;
d.print ();
d = 32;
d.print ();
d++;
d.print ();
d = 365;
++d;
d.print ();
d = 1;
--d;
d.print ();
d = 32;
d--;
d.print ();
DayOfYear e ("December", 31);
e.print ();
return 0;
}
В частности, согласно спецификациям prof для этой лаборатории, мне нужнов
- префикс и постфикс - операторы должны изменить объект (ы) DayOfYear
так, чтобы он представлял предыдущий день.Если день уже является первым днем года, новое значение объекта будет представлять последний день года.
++ префиксные и постфиксные операторы приращения ++.Эти операторы должны изменить объект DayOfYear, чтобы он представлял следующий день.Если день уже является концом года, новое значение объекта будет представлять первый день года.
Итак, я думаю, что мое решение потребует некоторого использования %
.Может быть, я мог бы перегрузить это?Я не уверен.%
может быть перегружено согласно учебнику.
Я читал учебник, и я думаю, что знаю основы перегрузки операторов в C ++, но я думаю, что мне не хватает чего-то простого или тонкого.Я пытался найти что-то конкретное для этого, но все, что я нашел, это общая информация о перегрузке операторов структурами и классами.Я не уверен, что делать в данный момент.Я думаю, что мой print ()
метод тоже будет сложной задачей, но решение этой проблемы должно значительно облегчить эту последнюю часть задания.
Буду признателен за любые указания или помощь!Спасибо.
РЕДАКТИРОВАТЬ: профессор четко заявил в требованиях проблемы, что я должен предположить, что год составляет 365 дней.
Я беру первый курс C ++, предлагаемый в моем колледже, поэтому, если есть лучший способ сделать это с более продвинутыми концепциями, НЕ ПОСТАВЛЯЙТЕ ЕГО , потому что они не имеют значения, и я, вероятно,не будет знать, о чем вы говорите.
Явные цели для назначения: Напишите класс с именем DayOfYear, который принимает целое число, представляющее день года, и переводит его в строку, состоящую измесяц, за которым следует день месяца.Примеры: День 2 => 2 января, День 32 => 1 февраля, День 365 => 31 декабря. Предположим, 365 дней в году.Конструктор для класса должен принимать в качестве параметра целое число, представляющее день года.Класс должен иметь функцию-член print (), которая печатает день в формате месяца-месяца, как в приведенных выше примерах.Добавьте второй конструктор, который принимает два параметра: строку, представляющую месяц, и целое число (1-31) для дня месяца.Затем конструктор должен инициализировать целочисленный член класса для представления дня, указанного в параметрах month и day of month.Добавьте следующие перегруженные операторы: операторы префикса ++ и постфикса.Эти операторы должны изменить объект DayOfYear, чтобы он представлял следующий день.Если день уже является концом года, новое значение объекта будет представлять первый день года.--prefix и постфиксные операторы декремента.Эти операторы должны изменить объект DayOfYear, чтобы он представлял предыдущий день.Если этот день уже является первым днем года, новое значение объекта будет представлять последний день года.
Моя цель - выяснить эти операторы и в основном метод print ()
. Я думаю Я хорошо справился с остальными вещами, но это дает мне загвоздку.