Return a reference by a class function and return a whole object in c++? -


operator overloading in class cvector:

cvector cvector::operator+ (cvector param) {   cvector temp;   temp.x = x + param.x;   temp.y = y + param.y;   return (temp); } 

and in main:

cvector (3,1);   cvector b (1,2);   cvector c;   c = + b; 

so object passed value, , temp object being created. guess b being passed value, 1 calling + therefore x , y belong , pram.x , param.y b. temp returned , the copy assignment operator delivers temp's values c?

but this:

cvector& cvector::operator= (const cvector& param) {   x=param.x;   y=param.y;   return *this; } 

and in main:

a=b; 

again calling = , b being passed reference const.(in case matter if passed value?) confused, x belonging assigned param.x of be. why isn't function void, since x , y can accessed function. return *this means, know address of object calling function, *this function itself, if returning object need assign it somewhere previous c=temp after temp=a+b? , cvector& mean, doesn't expecting address of object of cvector type?

in other words why isn't function just:

void cvector::operator= (const cvector& param)     {       x=param.x;       y=param.y;     } 

??

then there code

#include <iostream>  using namespace std;  class calc {  private:    int value;  public:    calc(int value = 0) { this->value = value; }    calc& add(int x) { value += x; return *this; }    calc& sub(int x) { value -= x; return *this; }    calc& mult(int x) { value *= x; return *this; }    int getvalue() { return value; } };   int main() {    calc ccalc(2);    ccalc.add(5).sub(3).mult(4);    cout << ccalc.getvalue();    return 0;  } 

now if removed & functions:

  calc add(int x) { value += x; return *this; }    calc sub(int x) { value -= x; return *this; }    calc mult(int x) { value *= x; return *this; }  

and used

calc ccalc(2) ccalc.add(5); ccalc.sub(3); ccalc.mult(4); 

instead of former, produce same resault. why calc& returne type allow chaining.

i not want know how program, since object oriented writing pattern (this written this, needed if that) opposed structured programming have use logic, know why peace of code defined is, , why isn't intuitively think should be(although learn programming year).

thanks!

so why isn't function void, since x , y can accessed function. return *this means

since operator=() declared return reference, return *this; returns reference current object. allows chain assignment operators. example,

a = b = c; 

will call b.operator=(c); , return reference b. a assigned call equivalent a.operator=(b).


Comments

Popular posts from this blog

java - Run a .jar on Heroku -

java - Jtable duplicate Rows -

validation - How to pass paramaters like unix into windows batch file -