class A{
..........
..........
};
int x;
A a;
x=a + x; // option 1
x=x + a; // option 2
x+=a; // option 3
Will the operator + overload for all option 1 2, & 3 will be same? i.e. int A::operator+(int s)
if not why and what for others?
class A{
..........
..........
};
int x;
A a;
x=a + x; // option 1
x=x + a; // option 2
x+=a; // option 3
Will the operator + overload for all option 1 2, & 3 will be same? i.e. int A::operator+(int s)
if not why and what for others?
No.
This will call A::operator +(int)
, or operator +(A, int)
:
x=a + x; // option 1
This will call operator +(int, A)
(there's no such thing as int::operator +(A)
):
x=x + a; // option 2
This will call operator +=(int, A)
(but you had better make the first argument A&
, not just A
or you won't actually be able to write a working +=
operator). There's no such thing as int::operator +=(A)
:
x+=a; // option 3
The reason they call different operator overloads is because they are different... not sure what else to tell you.
No operator overloading needed at all, since you basically do int + int
or int += int
.
However, for completeness, for an operation such as A + B
the overload resolution is
A.operator+(B)
operator+(A, B)
For +=
it's different since it's a separate operator, operator+=
. It can't have any non-member overload (no assignment operator can), so for A += B
the only possible attempt is A.operator+=(B)
.
After your edit, option 1 is still A.operator(x)
or operator+(A, x)
(as outlined above).
Option 2 can't have a member overload, so the only viable variant is opetrator+(x, A)
, or x + static_cast<int>(A)
.
Option 3 can only be x += static_cast<int>(A)
.
The static_cast<int>(A)
option will use an operator int
overload. If that doesn't exist then those alternatives are not possible and you will get an error when building.
I also recommend e.g. this operator overloading reference. And of course that you read a few good books.
In your example,if you do like A::operator+(int s)
,then this overloading does not work for x+a
,unless you define a type conversion like operator int()
. Because the operator +
as member function will has the implicit this
pointer as the rhs
parameter.
So it's recommended for you to overload the operator +
as non-member function.And if necessary,provide a implicit type conversion likeoperator int()
,or A(int)
;
Once you decide to overload operator+
,it's recommend to provide operator+=
as well,so as *,/,-
. Because the compiler will not generate the operator+=
automaticlly for you.