| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > Доработка программы на С++ |
| Автор: Pakshin A. S. 18.5.2006, 20:24 | ||
Есть прога:
Она вроде работает, но здесь явно что-то оформлено не по С++'овски... Укажите что и как тут должно быть... Сейчас попытался ввести многочлен степени 3... Почему-то она (прога) обращатся не к тому, что нужно, а именно вылетает с ошибкой. Не получается считать первый коэффициент при выводе... P. S. Помогающим гарантируются плюсы, если что-то дельное подскажете и с примерами... Добавлено @ 20:32 Кстати, юзается Microsoft Visual C++ 6.0 |
| Автор: MAKCim 18.5.2006, 21:23 | ||||||||||||||||
1. В CMainData вместо массива int* лучше, имхо, использовать готовый вектор (отпадает необходимомть контроля за выделением/освобождением памяти)
2.
судя по коду классы нигде не объявлены и не определены в месте использования в качестве friend 3. использование потоков cin, cout в CUser::ShowData() нехорошо, лучше наверное перегрузить operator<<() для CUser
4. неправильная семантика использования operator+, operator- в СPolynomial правильнее определить operator+=, operator-=, ... а через них operator+, operator-, ... (не как члены класса)
5. Использовать friend надо, имхо, как можно реже В данном случае я бы сделал нечто такое
Добавлено @ 21:28 если степень многочлена известна в compile-time можно воспользоваться для хранения cell-ов шаблоном (время компиляции увеличится зато увеличится также быстродействие)
Добавлено @ 21:36 если важна производительность и нельзя использовать статические массивы, можно использовать вместо vector<koef_t> valarray<koef_t>, который специально создавался для численных операций |
| Автор: Fixin 18.5.2006, 21:48 | ||
|
| Автор: Pakshin A. S. 19.5.2006, 09:16 | ||
Лучше, но компилятор ругается на все это дело вот так:
|
| Автор: Pakshin A. S. 19.5.2006, 11:26 | ||
Короче с перегрузкой << ничего не выходит... |
| Автор: nostromo 19.5.2006, 11:53 |
| Странно, у меня последний листинг заработал. Правда, VS 2003 и убрал const из ostream& operator<< (ostream& stream, const CMainData& obj). В чем проблема? Как ругается компилятор? Еще, в теле оператора "<<" Вы используете "wcout <<" вместо "stream <<". Кажется, это может привести к неприятностям. Дале, зачем в CPolynomial методы min, max. Есть стандартные std::max<int>, std::min<int>. И главное: я полностью согласен со всеми замечаниями MAKCim-а, текст нужно переписывать. |
| Автор: Pakshin A. S. 19.5.2006, 11:56 | ||
на строчку в перегружаемом операторе int nn=obj.GetN(); Добавлено @ 11:59 Да... помогло, но только error C2593: 'operator <<' is ambiguous при cout << Poly1; Добавлено @ 12:00 Тьфу.. убрал ошибку... |
| Автор: MAKCim 19.5.2006, 19:39 | ||||
не стоит, в CMainData лучше сделать GetN() константой (так и напрашивается)
Добавлено @ 19:40 все таки я не понимаю, зачем Вам аж 3 класса для реализации многочлена? |