#include <iostream>

using namespace std;

class Integer{
public:
    int value;

    Integer(int in = 0): value(in){cout << "I'm a constructor for " << in << endl;}
    Integer plus(const Integer& i){return Integer(this->value + i.value);}
    void print(){cout << value << endl;}

    //why did I eventually have to make the parameter const?
    Integer operator+(const Integer& other){return this->plus(other);}
};

int main(){

    Integer i(2); //cannot say Integer i();
    Integer j(5);
    Integer k;
    k = i + j;
    k.print();
    k = i + 8;
    k.print();    

    //BEFORE you run this program, predict how many times the
    //constructor will be called.

//    k = 8 + i;
//    k.print();

    return 0;
}

