Problem z przeładowaniem operatora dwuargumentowego

0

Witam,

chcę przeładować operator "+", mój kod jest nastepujący:

class Vector
{
public: int x;
public: int y;

public: Vector(int x, int y) : x(x), y(y) {};
public: Vector operator*(Vector v1, int val)
		{
			Vector v(v1.x * val, v1.y * val);
			return v;
		}
};

Dostaję error: too many parameters for this operator function (dla public: Vector operator*(Vector v1, int val))

Proszę o pomoc, poniewaz nie rozumem dlaczego tak jest.

0

Jeżeli operator dwuargumentowy jest funkcją składową to pierwszym parametrem jest obiekt tej klasy (w skrócie *this). Dlatego potrzebujesz tylko jednego argumentu - u Ciebie int.

Trochę bardziej logicznie to wygląda, kiedy operator nie jest funkcją składową.

Ja radziłbym zrobić to tak: jako funkcję składową przeciążasz operator "złożony" czyli np +=, a następnie jako zwykłą funkcję przeciążasz operator + i wewnątrz niej wykorzystujesz ten += (http://ideone.com/zY8Vxm).

Btw: napisałeś, że chcesz przeciążyć + a przeciążasz *.

0

Albo robisz to jako metodę:

class Vector
  {
   ...
   Vector operator*(int val)const { return Vector(x*val,y*val); }
  };

Albo robisz za pomocą funkcji:

class Vector
  {
   ...
  }; 
Vector operator*(const Vector &v,int val) { return Vector(v.x*val,v.y*val); }

Przy okazji zastanów się nad zmianą typów x,y,val na double;

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