//: C12:OperatorOverloadingSyntax.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt

#include <iostream>
using namespace std;

class Integer
{

int i;

public:

Integer(int ii) : i(ii) {}
const Integer operator+(const Integer& rv) const
{

cout << "operator " << i << ", " << rv.i << endl;
return Integer(i + rv.i);

}

Integer& operator+=(const Integer& rv)
{

cout << "operator+= " << i << ", " << rv.i << endl;
i += rv.i;
return *this;

}

};

int main()
{

cout << "built-in types:" << endl;
int i = 1, j = 2, k = 3;
k += i + j;
cout << "user-defined types:" << endl;
Integer ii(1), jj(2), kk(3);
kk += ii + jj;

} ///:~