Что сразу бросается в глаза:
- Нет единого стиля оформления кода: в большинстве мест отступ в два пробела, но в паре мест используется один пробел, в большинстве мест закрывающая фигурная скобка идет на отдельной строке, но иногда впихнута в последнюю, в половине файлов используется очень странный стиль, где функции начинаются с отступом в один пробел.
- Проект слишком маленький, чтобы делать его некроссплатформенным. У меня с первого раза не скомпилировалось (conio.h и несответствие регистра в названии файла Polynomial.hpp в архиве)
- В паре мест стоит точка с запятой после тела функции - будет синтаксическая ошибка на старых компиляторах.
- Операторы присваивания (=,+=,-=,*=) должны возвращать не void, а Polynomial& (ссылку на полученный после присваивания объект).
- Вместо конструктора из FILE* и метода Display нужны операторы для работы с потоками ввода-вывода.
- Дизайн деления с остатком ужасен (как минимум, нет потокобезопасности)
- Не используются даже базовые средства C++. std::vector здесь будет очень кстати, или хотя бы уж new вместо malloc.
- В C++ заголовки называются не stdio.h, а cstdio.
- Почему это вообще не шаблонный класс?
Тут есть несколько интересных предложений.
По стилю. Спасибо, посмотрю.
Кроссплатформенность? Увы, я не знаю других платформ и не могу тестировать. Что касается универсальности текста для разных компиляторов, то, боюсь, это невозможно. Из двух текстов
for(unsigned i =...)
{...
}
for(unsigned i =...)
{...
} и
for(unsigned i =...)
{...
}
for(i =...)
{...
} один компилятор любит только первый, а другой -- только второй.
Следующие два предложения приняты. Спасибо.
"конструктора из
FILE* и метода
Display" -- по учебникам, это потокоориентированный ввод/вывод. Если Вы имеете в виду символику >> и <<, то она слишком sophisticated для фундаментального представления. При переходе к профессиональной работе в программировании (и даже раньше) читатель легко перейдет к этому стилю. Задачи научить всем вкусным плюшкам языка я не ставил -- для этого существуют учебники.
Особенно мне понравилось напихать в контейнер мономы и назвать это полиномом. Давно о таком думал, даже предложил одному студенту реализовать. К сожалению, тот соскочил. Не знаю только, чем это лучше. Зато точно вижу недостаток: такой подход требует от читателя бОльших знаний. Это же касается создания шаблонов.
Дизайн деления с остатком. Подскажите, пожалуйста, что такое "потокобезопасность". Потеря информации в ситуациях типа
P / Q + R / S? Что такое pair, почитаю... А он позволит написать
P + R / S?
А не сводится ли
new Polynomial компилятором к
(Polynomial *)malloc? На мой взгляд, второй вариант дает лучшее фундаментальное представление о том, что делается в программе. Читатель легко перейдет самостоятельно к более лаконичному варианту, когда поймет более подробный. Выбор осознанный.
Заголовок
stdio.h в файле .cpp мой компилятор скушал не поперхнувшись.
-- 03.09.2018, 19:07 --Muninспасибо! Немного изменю тон в своих комментариях.