operator += w klasie

0

Witam,

Mam pytanie. Co tutaj jest niepoprawnie napisane, że operator += nie działa jak powinien?

class Trojmian
{
double wspolczynnik_0_;
double wspolczynnik_1_;
double wspolczynnik_2_;

public:
Trojmian(double wspolczynnik_0=0.0,double wspolczynnik_1=0.0,double wspolczynnik_2=0.0):
    wspolczynnik_0_(wspolczynnik_0),wspolczynnik_1_(wspolczynnik_1),
    wspolczynnik_2_(wspolczynnik_2)
    {

    }

double Wspolczynnik(int x) const
{
    double wynik=0;

    switch(x)
    {
    case 0:
        wynik=wspolczynnik_0_;
        break;
    case 1:
        wynik=wspolczynnik_1_;
        break;
    case 2:
        wynik=wspolczynnik_2_;
        break;
    }

    return wynik;
}

Trojmian operator+= (const Trojmian& s) const
{

    double a=Wspolczynnik(0)+s.Wspolczynnik(0);
    double b=Wspolczynnik(1)+s.Wspolczynnik(1);
    double c=Wspolczynnik(2)+s.Wspolczynnik(2);
    Trojmian t(a,b,c);

    return t;

}
2

działa poprawnie jeśli oczekujesz, żeby działał tak:

Trojmian a(1,2,3);
Trojmian b(2,3,4);
Trojmian r = a += b;

Zaimplementowałeś go mniej więcej tak jak działa operator+ przez co działa dziwnie.

Powinieneś zrobić cos w ten deseń:

 const Trojmian& operator+= (const Trojmian& s)
    {
        wspolczynnik_0_ += s.Wspolczynnik(0);
        wspolczynnik_1_ += s.Wspolczynnik(1);
        wspolczynnik_2_ += s.Wspolczynnik(2);
        return *this;
    }
2

to:

 Trojmian operator+= (const Trojmian& s) const
    {

        double a=Wspolczynnik(0)+s.Wspolczynnik(0);
        double b=Wspolczynnik(1)+s.Wspolczynnik(1);
        double c=Wspolczynnik(2)+s.Wspolczynnik(2);
        Trojmian t(a,b,c);

        return t;

    }

powinieneś przekształcić w :

Trojmian operator+(const Trojmian &s)const
  {
   return Trojmian(wspolczynnik_0_+s.wspolczynnik_0_,wspolczynnik_1_+s.wspolczynnik_1_,wspolczynnik_2_+s.wspolczynnik_2_);
  }
0

Dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1