#include <iostream>
using namespace std;
class three_d {
int x, y, z;
public:
three_d(int a, int b, int c) {x=a; y=b, z=c; }
three_d operator+(three_d op2);
friend ostream &operator<<(ostream &stream, three_d &obj);
friend ostream &operator<<(ostream &stream, const three_d &obj);
operator int() {cout << "converting to int"<< endl; return x*y*z;}
};
ostream &operator<< (ostream &stream, three_d &obj)
{
stream << "(non-const) ";
stream << obj.x << ", ";
stream << obj.y << ", ";
stream << obj.z << endl;
return stream;
}
ostream &operator<< (ostream &stream, const three_d &obj)
{
stream << "(const) ";
stream << obj.x << ", ";
stream << obj.y << ", ";
stream << obj.z << endl;
return stream;
}
three_d three_d::operator+ (three_d op2)
{
cout << "adding" << endl;
x+=op2.x;
y+=op2.y;
z+=op2.z;
return *this;
}
int main()
{
three_d a(1, 2, 3), b(2, 3, 4);
cout << a << b;
cout << "b+100" << endl;
cout << b+100 << endl; //31 line
cout << "a+b" << endl;
cout << a+b << endl; // 32
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgdGhyZWVfZCB7CiAgICBpbnQgeCwgeSwgejsKcHVibGljOgogICAgdGhyZWVfZChpbnQgYSwgaW50IGIsIGludCBjKSB7eD1hOyB5PWIsIHo9YzsgfQogICAgdGhyZWVfZCBvcGVyYXRvcisodGhyZWVfZCBvcDIpOwogICAgZnJpZW5kIG9zdHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmc3RyZWFtLCB0aHJlZV9kICZvYmopOwogICAgZnJpZW5kIG9zdHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmc3RyZWFtLCBjb25zdCB0aHJlZV9kICZvYmopOwogICAgb3BlcmF0b3IgaW50KCkge2NvdXQgPDwgImNvbnZlcnRpbmcgdG8gaW50Ijw8IGVuZGw7IHJldHVybiB4Knkqejt9Cn07Cm9zdHJlYW0gJm9wZXJhdG9yPDwgKG9zdHJlYW0gJnN0cmVhbSwgdGhyZWVfZCAmb2JqKQp7CiAgICBzdHJlYW0gPDwgIihub24tY29uc3QpICI7CiAgICBzdHJlYW0gPDwgb2JqLnggPDwgIiwgIjsKICAgIHN0cmVhbSA8PCBvYmoueSA8PCAiLCAiOwogICAgc3RyZWFtIDw8IG9iai56IDw8IGVuZGw7CiAgICByZXR1cm4gc3RyZWFtOwp9Cm9zdHJlYW0gJm9wZXJhdG9yPDwgKG9zdHJlYW0gJnN0cmVhbSwgY29uc3QgdGhyZWVfZCAmb2JqKQp7CiAgICBzdHJlYW0gPDwgIihjb25zdCkgIjsKICAgIHN0cmVhbSA8PCBvYmoueCA8PCAiLCAiOwogICAgc3RyZWFtIDw8IG9iai55IDw8ICIsICI7CiAgICBzdHJlYW0gPDwgb2JqLnogPDwgZW5kbDsKICAgIHJldHVybiBzdHJlYW07Cn0KdGhyZWVfZCB0aHJlZV9kOjpvcGVyYXRvcisgKHRocmVlX2Qgb3AyKQp7CiAgICBjb3V0IDw8ICJhZGRpbmciIDw8IGVuZGw7CiAgICB4Kz1vcDIueDsKICAgIHkrPW9wMi55OyAKICAgIHorPW9wMi56OyAKICAgIHJldHVybiAqdGhpczsKfQoKaW50IG1haW4oKQp7CiAgICB0aHJlZV9kIGEoMSwgMiwgMyksIGIoMiwgMywgNCk7CiAgICBjb3V0IDw8IGEgPDwgYjsKICAgIGNvdXQgPDwgImIrMTAwIiA8PCBlbmRsOwogICAgY291dCA8PCBiKzEwMCA8PCBlbmRsOyAvLzMxIGxpbmUKICAgIGNvdXQgPDwgImErYiIgPDwgZW5kbDsKICAgIGNvdXQgPDwgYStiIDw8IGVuZGw7IC8vIDMyCiAgICByZXR1cm4gMDsKfQo=