PMG http://forum.pmg.org.ru/ |
|
Помогите разобратся с перегрузкой операторов http://forum.pmg.org.ru/viewtopic.php?f=4&t=5319 |
Страница 1 из 1 |
Автор: | Towards [ 30 ноя 2007 00:32 ] |
Заголовок сообщения: | Помогите разобратся с перегрузкой операторов |
Попробывал перегрузить операцию "+", она должна складывать массивы по элементно. Не уверен, что сделал это верно, т.к. при выводе полученного массива вылезают какие-то странные числа. Но ошибка скорее и в функции вывода тоже) Помогите плиз. Код: Код: #include <iostream.h>
using std::cout; using std::cin; class input_mass { int q[100]; int k,i,sum[10]; public: void put_mass (int i); int get_mass (); friend input_mass operator+(input_mass op1, input_mass op2); int show(); }; input_mass operator +(input_mass op1, input_mass op2) { int k; input_mass temp; for(k=0;k<10;k++) temp.sum[k] = op1.q[k]+op2.q[k]; return temp; } int input_mass::show() { k=0; for(k=0;k<10;k++) cout << sum[k]<< "\n"; return sum[k++]; } void input_mass ::put_mass(int i) { k=0; if (k==100){ cout << "coco"; return; } q[k]=i; k++; } int input_mass ::get_mass() { k=0; return q[k++]; } int main () { int i; input_mass a,b,c; cout << "array 1 \n"; for(i=0;i<10;i++){ a.put_mass(i); cout << a.get_mass()<< "\n"; } cout << "array 2\n"; for (i=0;i<10;i++) { b.put_mass(i); cout << b.get_mass()<< "\n"; } c = a + b; cout << "summa massivov: \n"; c.show(); return 0; } Заранее благодарю! |
Автор: | _dex_ [ 30 ноя 2007 07:04 ] |
Заголовок сообщения: | |
Towards, >friend input_mass operator+(input_mass op1, input_mass op2); зачем friend? делается вот - так: Код: // объявление в классе:
input_mass operator+(input_mass op)const; // реализация: input_mass input_mass::operator+ (input_mass op) const { input_mass temp; for(int k=0;k<10;k++) temp.sum[k] = q[k]+op.q[k]; return temp; } ЗЫ: код просто ужос ) |
Автор: | Towards [ 30 ноя 2007 12:39 ] |
Заголовок сообщения: | |
Через friend тоже работает. У меня не получается вывести конечный массив, как уже писал, выводит бред какой-то)) Цитата: ЗЫ: код просто ужос я ведь токо учусь а что в нем ужасного? )
|
Автор: | DanQuimby [ 02 фев 2008 13:32 ] |
Заголовок сообщения: | |
1.перемудрил малость. 2.придерживайся поговорки "котлеты отдельно мухи отдельно". обьявления и реализация не есть хорошо когда она в одном и том же месте. |
Автор: | Stalker [ 27 мар 2008 06:59 ] |
Заголовок сообщения: | Re: Помогите разобратся с перегрузкой операторов |
Код: // реализация: input_mass input_mass::operator+ (input_mass op) const { input_mass temp; for(int k=0;k<10;k++) temp.sum[k] = q[k]+op.q[k]; return temp; } не совсем согласен с автором. я бы сделал так. Код: input_mass& input_mass::operator+(const input_mass &op) { if (this != &op) { for (int i = 0; i < AnyConst/*советую вынести константу*/;i++) this->sum[i] = this->q[i] + op.q[i]; //здесь this для понятности, можно и убрать return *this; } } насчет мух и котлет - согласен на все 100, упрощайте себе жизнь. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |