55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
||||||
1 | ||||||
Перегруженная функция сравнения двух дат14.07.2013, 13:59. Показов 2358. Ответов 26
Метки нет (Все метки)
Как сократить функцию которая сравнивает две даты?
Получилось кое-как, да и еще предупреждение показывает, что значение возвращается не при всех путях выполнения
warning C4715: CDate::operator<: значение возвращается не при всех путях выполнения warning C4715: CDate::operator<=: значение возвращается не при всех путях выполнения Может есть более простой способ
0
|
14.07.2013, 13:59 | |
Ответы с готовыми решениями:
26
Функция сравнения двух чисел Функция сравнения двух строк Функция для сравнения двух массивов Функция для сравнения двух символьных последовательностей |
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
14.07.2013, 14:00 | 2 |
Я бы предложил перевести все в одни единицы измерения и уже потом сравнить.
0
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
14.07.2013, 14:03 [ТС] | 3 |
0x10, а что за единицы измерения?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
14.07.2013, 14:05 | 4 |
В данном случае пересчитал бы все в дни.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
14.07.2013, 14:07 | 6 |
BigLow, и еще нюанс: всю логику достаточно написать в единственном операторе - <. Остальные (>, <=, >=) пишутся уже через него.
1
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
14.07.2013, 14:08 [ТС] | 7 |
это вы имеете ввиду, саму дату представить как количество дней от какого-то числа?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
14.07.2013, 14:11 | 8 |
BigLow, типа того.
И пока помню - такие операторы привычнее видеть снаружи класса, т.е. чтобы они принимали два аргумента: левый и правый. Добавлено через 1 минуту BigLow, А можно и схалтурить: сформировать две строки вида YYYYMMDD и сравнить лексикографически. (хотя казалось бы при чем тут строки, можно и числами)
1
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
14.07.2013, 14:16 [ТС] | 9 |
0x10, насчет строк - это хорошая идея спасибо
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
14.07.2013, 14:18 | 11 |
year * 10000 + month * 100 + day и фиг с ними.
1
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
14.07.2013, 14:25 [ТС] | 12 |
а если из этого числа нужно будет узнать день, месяц или год, то каким способом это проделать?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
14.07.2013, 14:33 | 13 |
Зачем? Я не предлагаю его хранить, только вычислить для сравнения дат. (хотя в обратной операции нет ничего хитрого)
1
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
||||||
14.07.2013, 14:43 [ТС] | 14 | |||||
а я с начала подумал, что саму дату в таком виде хранить.
все, понял как сделать. вот что получилось:
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
14.07.2013, 14:44 | 15 |
И на остальные операторы придется по одной строчке.
Тут есть еще пара нюансов: в частности, такие методы не будут работать с константными объектами. (чтобы наверняка - как уже говорил, лучше сделать внешними функциями).
0
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
||||||
14.07.2013, 14:49 [ТС] | 16 | |||||
будут, если функцию сделать const
0
|
0x10
|
14.07.2013, 14:55
#17
|
Не по теме: В данном случае мб и все равно, но в будущем вероятно найдется кто-нибудь, кто стукнет по рукам)
1
|
Jupiter
|
14.07.2013, 15:00
#18
|
0
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
14.07.2013, 15:33 [ТС] | 19 |
хорошо прислушаюсь к совету
Добавлено через 24 минуты не могли бы пояснить поточнее? в операторах (>, >=, <=) используется только (<)? никаких других операторов в нем нет? просто я сейчас пытаюсь реализовать это для остальных, но не получается для ">=" пишу return !(*this<right); а вот с другими проблема
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
14.07.2013, 15:39 | 20 |
Там все так просто, аж смешно)
Если есть operator<(a, b), то легко определить operator>(a, b). Когда А больше В? Тогда, когда В меньше А. А оператор меньше уже определен. operator>(a, b) { return b < a; } Ну и оставшийся <= по аналогии
0
|
14.07.2013, 15:39 | |
14.07.2013, 15:39 | |
Помогаю со студенческими работами здесь
20
Функция sqrt: существует более одного экземпляра. Функция перегруженная Перегруженная функция Перегруженная функция Перегруженная функция Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |