Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Помогите разобратся с перегрузкой


Автор: Towards 2.12.2007, 23:24
Попробывал перегрузить операцию "+", она должна складывать массивы по элементно и выводить полученный массив.Вывод полученного массива не получается - вылезают какие-то странные числа. Помогите плиз. 
Код

#include <iostream.h>
using std::cout;
using std::cin;
class input_mass {
    int q[10];
    int k,i,sum[10];
public:
    void put_mass (int i);
    int get_mass ();
    input_mass operator+(input_mass op2)const;
    void show();
};
input_mass input_mass::operator +(input_mass op2)const
{
    input_mass temp;
    for(int k=0;k<10;k++)
        temp.sum[k] = q[k]+op2.q[k];
    return temp;
}
void input_mass::show()
{
    for(k=0;k<10;k++)
        cout << sum[k]<< "\n";
}

void input_mass ::put_mass(int i)
{
    k=0;
    if (k==100){
        cout << "dsadd";
        return;
    }
    
q[k]=i;
k++;
}
int  input_mass ::get_mass()
{
    k=0;
    return q[k++];
}
int main ()
{
    input_mass a,b,c;
    cout << "array 1 \n";
    for(int i=0;i<10;i++){
    a.put_mass(i);
    cout << a.get_mass()<< "\n";
    }
    cout << "array 2\n";
    for (int 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;
}


Заранее благодарю!

Автор: DjoNIK 3.12.2007, 00:21
Код

input_mass input_mass::operator +(input_mass op2)const{
    input_mass temp;
    for(int k=0;k<10;k++)
        temp.sum[k] = q[k]+op2.q[k];
    return temp;
}

По-поводу реализации куча вопросов...
1) При реализации класса обычно передают ссылку
 1.1) Если переданные объекты не должны изменятся, то их делают константными
2) Перегруженые бинарные операции обычно реализуют через дружественные функции
3) Создание временной переменной и возвращение через нее значение может оказаться затратным делом (следствие не выполнния первого пункта)
4) Суммируемые input_mass-ы не обязательно будут иметь размерность k
5) Ну и так далее....

Автор: Daevaorn 3.12.2007, 00:25
У тебя что-то странное с полем класса k. Он у тебя везде обнуляется, поэтому в результате на выходе первое значение 18( т.е. 9+9 , последнее что попало в q[0]), а все остальные как придется, т.к. q[1] больше не заполняются.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)