Вот как я могу реализовать вашу функцию сравнения, хотя для привыкания к формату требуется время:
int Date::Compare(const Date& d) const {
return
(year < d.year) ? -1 :
(year > d.year) ? 1 :
(month < d.month) ? -1 :
(month > d.month) ? 1 :
(day < d.day) ? -1 :
(day > d.day) ? 1 :
0;
}
Или, возможно:
template<typename T>
int Compare(T a, T b) {
if (a < b) return -1;
if (b < a) return 1;
return 0;
}
int Date::Compare(const Date& d) const {
int a = Compare(year, d.year);
if (a == 0) a = Compare(month, d.month);
if (a == 0) a = Compare(day, d.day);
return a;
}
Я бы не стал использовать operator==
в Сравнении, хотя ответы, говорящие вам, как реализовать operator==
, хороши, если вы тоже этого хотите. Причина в том, что operator==
явно придется посмотреть на те же поля, что и для сравнения, и если он вернет false, тогда Compare снова выполнит очень похожую работу. Эффективность, вероятно, не проблема, но она дублирует логику.
И что стоит, идиоматический C ++ должен реализовать operator<
и, возможно, также согласованные operator==
и operator>
, а не функцию сравнения "все в одном". Операторы - это то, что стандартные алгоритмы используют для поиска и сортировки, а все остальное следует. Ява решила действовать по-другому.