перегрузка логических операций внутри классов в c ++ и операторы if для дат внутри класса

Я использую этот код в моем предыдущем вопросе:
Добавление реализации года в c ++ с использованием класса

Я хочу использовать оператор if для проверки дат таким образом, чтобы, если день был 31, он возвращался к 0, а месяц увеличивался на единицу. Я даже пытался написать другой метод и использовать его внутри операции +, но это также не удалось, потому что я увеличиваю день в функции возврата внутри объявления операции. В результате его нужно будет увеличивать перед проверкой условий в первую очередь! но что, если номер был изначально 31? нет месяца с 32 днями!

Я пытался использовать его, но из-за моей реализации он не работал должным образом

Мой другой вопрос заключается в том, что я пытаюсь использовать булеву проверку ссылок также с операцией ==

Это то, что я сделал до сих пор:

bool operator==(const Date&) const;

bool Date::operator==(const Date& date) const
{
if (day == date.day && monthnum == date.monthnum && year == date.year)
return true;
else return false;

}

но по какой-то причине, когда я пытаюсь проверить его в основном, например, date1 == date2, он не компилируется!
я пишу это неправильно?

«нет операции == соответствует этим операндам», это ошибка, которую я получаю, когда пытаюсь скомпилировать код

0

Решение

Я хочу использовать оператор if для проверки дат таким образом, чтобы, если день был 31, он возвращался к 0, а месяц увеличивался на единицу.

Это так просто реализовать, как:

if (day == 31) {
day = 0;
monthnum++;
}

Я пытаюсь проверить это в основном, говоря, например, date1 == date2, он не компилируется! я пишу это неправильно?

Да, хорошо, вы объявляете бесплатную функцию operator==, а то, что вы хотите, это функция-член. внутри Date делать:

class Date {
public:
// ...
bool operator==(const Date&) const;
// ...
};

Вы также можете использовать бесплатную функцию, если честно, но это потребует дополнительных изменений, и в целом это то же самое. На всякий случай, если вы хотите использовать его, вот как:

bool operator==(const Date& lhs, const Date& rhs) {
return (lhs.day == rhs.day && lhs.monthnum == rhs.monthnum && lhs.year == rhs.year);
}

(Я удалил лишнюю if-else пара).


Компилятор утверждает, что «нет операции == соответствует этим операндам». У меня просто есть этот код в моей основной: cout << date1 == date2;

Да, вы должны сделать это вместо этого:

cout << (date1 == date2);

иначе то, что читает компилятор, таково:

(cout << date1) == date2;
2

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

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

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