When operator+
is defined inside class, left operand of operator is current instance. So, to declare a overload of operator+
you have 2 choices
- inside class, with only one parameter which is right operand
- outside of class, with two parameters, left and right operands.
Choice 1: outside class
class Vector
{
private:
double i;
double j;
double k;
public:
Vector(double _i, double _j, double _k)
{
i = _i;
j = _j;
k = _k;
}
Vector& operator+=(const Vector& p1)
{
i += p1.i;
j += p1.j;
k += p1.k;
return *this;
}
//Some other functionality...
};
Vector operator+(const Vector& p1, const Vector& p2)
{
Vector temp(p1);
temp += p2;
return temp;
}
Choice 2: inside class
class Vector
{
private:
double i;
double j;
double k;
public:
Vector(double _i, double _j, double _k)
{
i = _i;
j = _j;
k = _k;
}
Vector& operator+=(const Vector& p1)
{
i += p1.i;
j += p1.j;
k += p1.k;
return *this;
}
Vector operator+(const Vector & p2)
{
Vector temp(*this);
temp += p2;
return temp;
}
};
You can see how should be declared operators here : C/C++ operators
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…