I was checking a book of c++ and the put a function that is designed to make the class functions cascadable. In this book they conventionally make function inside the class to return a reference of the class rather than the class value. I tested returning a class by value or by reference and they both do the same. What is the difference?
#include<iostream>
using namespace std;
/*class with method cascading enabled functions*/
class a{
private:
float x;
public:
a& set(float x){
this->x = x;
return *this;
}
a& get(float& x){
x = this->x;
return *this;
}
a print(){
cout << "x = " << x << endl;
return *this;
}
};
int main(){
a A;
A.set(13.0).print();
return 0;
}
result
PS J:\c-c++> g++ -o qstn question1.cpp
PS J:\c-c++> .\qstn
x = 13
as you will notice this code work as spected. But happens here in detail?
First read What's the difference between passing by reference vs. passing by value?
Now that you're done reading, let's try a slightly more complicated example so we can really see the difference:
int main(){
a A;
A.set(13.0).set(42).print();
A.print();
return 0;
}
If we return by reference A
will be modified by set(13.0)
and then A
is returned and modified again by set(42)
. Output will be
x = 42
x = 42
but if we return by value A
will be modified by set(13.0)
and then a new temporary a
that is a copy of A
will be returned. This copy is modified by set(42)
, not A
.
Output will be
x = 42
x = 13
We have failed to cascade.