Не буду подробно останавливаться ... на ужасном хранении остатка от деления (вместо этого можно было бы спокойно вернуть pair из операции деления), на том, что конструктор по умолчанию создает объект с нарушенным инвариантом, приводящий к ошибкам при почти любых действиях с ним. Но не могу пройти мимо двухстраничной борьбы в Examples.pdf с забытым const в operator*, в результате которой сделаны выводы космического масштаба и космической же глупости...
Правильная работа с модификатором const - непростое дело. Стоило бы для начала почитать какую-нибудь книжку про это, а потом уже начинать писать тексты самому.
Насчет
pair, Вы так и не подсказали мне, как при его использовании реализовать возможность выражения
X + Y / Z.
Насчет
const в
operator*. Это не забывчивость, это была ошибка. Сначала я писал
const, но компилятор возражал против использования неконстантного вспомогательного метода
MultMonom. Я считал, что смысл
const состоит в примитивном отслеживании изменений параметра, и убедившись, что таковых нет, снял модификатор
const с параметра... А в
operator= это тем более "не нужно". В результате были ошибки компилирования, которые, как правило, легко обходились. Теперь, спасибо за указание, все работает нормально.
Но меня беспокоит то, что я так и не понимаю, почему в отсутствие
const компилятор бастовал. Мои предположения о возможных причинах были, очевидно, ошибочными. Но то, с какой легкостью Вы оценили "меру, степень, глубину" моей ошибки, позволяет надеяться, что Вы знаете правильный ответ. Не могли бы Вы растолковать?
Только ответ типа "Потому что правильно делать не так" не пройдет, ибо не снижает степень моего непонимания. Ссылка на стандарт с пруфлинком была бы лучше, но в таком случае остается непонимание, а почему в стандарте решили написать так?