In C++, i know there are two ways to overload. We can overload it inside (like class a
) or outside (like class b
). But, the question is, is there any difference between these two either in compile time or runtime or not?
class a { public: int x; a operator+(a p) // operator is overloaded inside class { a temp; temp.x = x; temp.x = p.x; return temp; } }; class b { public: friend b operator+(b, b); int x; }; b operator+(b p1, b p2) // operator is overloaded outside class { p1.x += p2.x; return p1; }
Operator overloading allows operators to have an extended meaning beyond their predefined operational meaning. Function overloading (method overloading) allows us to define a method in such a way that there are multiple ways to call it.
Explanation: . (dot) operator cannot be overloaded therefore the program gives error.
No. Operator overloading must involve at least one operand of class or enum type.
The member operator+
requires the LHS to be an a
- The free operator requires LHS or RHS to be a b
and the other side to be convertible to b
struct Foo { Foo() {} Foo(int) {} Foo operator+(Foo const & R) { return Foo(); } }; struct Bar { Bar() {} Bar(int) {} }; Bar operator+(Bar const & L, Bar const & R) { return Bar(); } int main() { Foo f; f+1; // Will work - the int converts to Foo 1+f; // Won't work - no matching operator Bar b; b+1; // Will work - the int converts to Bar 1+b; // Will work, the int converts to a Bar for use in operator+ }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With