#include<iostream>
using namespace std;
// Returning copies
class Test1
{
private:
int x;
int y;
public:
Test1 (int x = 0, int y = 0) { this->x = x; this->y = y; }
Test1 setX(int a) { x = a; return *this; }
Test1 setY(int b) { y = b; return *this; }
void print() { cout << "x = " << x << " y = " << y << endl; }
};
// Returning references
class Test2
{
private:
int x;
int y;
public:
Test2 (int x = 0, int y = 0) { this->x = x; this->y = y; }
Test2& setX(int a) { x = a; return *this; }
Test2& setY(int b) { y = b; return *this; }
void print() { cout << "x = " << x << " y = " << y << endl; }
};
int main()
{
Test1 obj1;
obj1.setX(10).setY(20);
obj1.print();
Test2 obj2;
obj2.setX(10).setY(20);
obj2.print();
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBSZXR1cm5pbmcgY29waWVzCmNsYXNzIFRlc3QxCnsKcHJpdmF0ZToKICBpbnQgeDsKICBpbnQgeTsKcHVibGljOgogIFRlc3QxIChpbnQgeCA9IDAsIGludCB5ID0gMCkgeyB0aGlzLT54ID0geDsgdGhpcy0+eSA9IHk7IH0KICBUZXN0MSBzZXRYKGludCBhKSB7IHggPSBhOyByZXR1cm4gKnRoaXM7IH0KICBUZXN0MSBzZXRZKGludCBiKSB7IHkgPSBiOyByZXR1cm4gKnRoaXM7IH0KICB2b2lkIHByaW50KCkgeyBjb3V0IDw8ICJ4ID0gIiA8PCB4IDw8ICIgeSA9ICIgPDwgeSA8PCBlbmRsOyB9Cn07CgovLyBSZXR1cm5pbmcgcmVmZXJlbmNlcwpjbGFzcyBUZXN0Mgp7CnByaXZhdGU6CiAgaW50IHg7CiAgaW50IHk7CnB1YmxpYzoKICBUZXN0MiAoaW50IHggPSAwLCBpbnQgeSA9IDApIHsgdGhpcy0+eCA9IHg7IHRoaXMtPnkgPSB5OyB9CiAgVGVzdDImIHNldFgoaW50IGEpIHsgeCA9IGE7IHJldHVybiAqdGhpczsgfQogIFRlc3QyJiBzZXRZKGludCBiKSB7IHkgPSBiOyByZXR1cm4gKnRoaXM7IH0KICB2b2lkIHByaW50KCkgeyBjb3V0IDw8ICJ4ID0gIiA8PCB4IDw8ICIgeSA9ICIgPDwgeSA8PCBlbmRsOyB9Cn07CgppbnQgbWFpbigpCnsKICBUZXN0MSBvYmoxOwogIG9iajEuc2V0WCgxMCkuc2V0WSgyMCk7CiAgb2JqMS5wcmludCgpOwoKICBUZXN0MiBvYmoyOwogIG9iajIuc2V0WCgxMCkuc2V0WSgyMCk7CiAgb2JqMi5wcmludCgpOwp9Cg==