Why Output of c++ code changes when I change the function return type? -


class test { private:   int x;   int y; public:   test(int x = 0, int y = 0) { this->x = x; this->y = y; }   test &setx(int a) { x = a; return *this; }   test &sety(int b) { y = b; return *this; }   void print() { cout << "x = " << x << " y = " << y << endl; } };  int main() {   test obj1(5, 5);   obj1.setx(10).sety(20);   obj1.print();   return 0; } 

the above code has output 10 20 when change return type of test &setx test setx , test &sety test sety, output changes 10 5. can explain reason same ? not assignment quoestion or related homework.

it temporary object.

in version without return reference, i.e. return type test code equivalent

test obj1(5, 5); test temp1 = obj1.setx(10); test temp2 = temp1.sety(20); // temp2 have x = 10 , y = 20, object discarded obj1.print(); 

as can see sety(20) called on temporary object, , returned value discarded. first setx(10) modify obj1

on other hand, if return reference, i.e. return type test &, no temporary created. both setx(10) , sety(20) affect original object (obj1), because method called on same object.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -