I was wondering why the following code is being compiled successfully.
#include <iostream> #include <cassert> using namespace std; class Integer{ private: int i; public: Integer(int value):i(value){} // unary or binary const Integer operator+(const Integer& rv){ cout << "operator+"<< endl; return Integer(i + rv.i); } // Binary Operator Integer& operator+=(const Integer& rv){ cout << "operator+=" << endl; i += rv.i; return *this; } ostream& operator<<(ostream& lv){ lv << i; return lv; } friend ostream& operator<< (ostream& lv, Integer& rv); }; ostream& operator<< (ostream& lv,Integer& rv){ return lv << rv.i; } int main(){ cout << "using operator overloading"<< endl; Integer c(0), a(4), b(5); Integer d = 8; c = a + b; cout << c << endl; cout << d << endl; } I dont understand why d = 8 is possible. d is a user defined type. I did not overloaded the assignment oeprator for the Integer class. Is there a default overloaded operator?