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