A function can also return objects either by value or by reference. When an object is returned by value from a function, a temporary object is created within the function, which holds the return value. This value is further assigned to another object in the calling function.
The syntax for defining a function that returns an object by value is
class_name function_name (parameter_list) { // body of the function }
To understand the concept of returning an object by value from a function, consider this example.
Example: A program to demonstrate the concept of returning objects from a function
#include<iostream.h> class weight { int kilogram; int gram; public: void getdata (); void putdata (); void sum_weight (weight,weight) ; weight sum_weight (weight) ; } ; void weight :: getdata() { cout<<"/nKilograms:"; cin>>kilogram; cout<<"Grams:"; cin>>gram; } void weight :: putdata () { cout<<kilogram<<" Kgs. and"<<gram<<" gros.\n"; } weight weight :: sum_weight(weight w2) { weight temp; temp.gram = gram + w2.gram; temp.kilogram=temp.gram/1000; temp.gram=temp.gram%1000; temp.kilogram+=kilogram+w2.kilogram; return(temp); } int main () { weight w1,w2 ,w3; cout<<"Enter weight in kilograms and grams\n"; cout<<"\n Enter weight #1" ; w3 = w1.sum_weight (w2); w1.getdata(); cout<<" \n Enter weight #2" ; w2.getdata(); w3.sum_weight(wl,w2); cout<<"/n Weight #1 = "; w1.putdata(); cout<<"Weight #2 = "; w2.putdata(); cout<<"Total Weight = "; w3.putdata(); return 0; }
As the return type of function is weight (an object of class weight), a temporary object temp is created within the function for holding return values. These values are accessed as temp kilogram and temp gram by the function. When the control returns to main (), the object temp is assigned to the object w3 in main( ).
Figure represents accessing of member variables within the function and returning a result from the temporary object.
In the case of returning an object by reference, no new object is created, rather a reference to the original object in the called function is returned to the calling function.
The syntax for defining a function that returns an object by reference is
class_name& function_name (parameter_list) { //body of the function }
However, a reference to the local object (object declared inside the function) cannot be returned from the function since a reference to local data points to data within the function. Hence, when the function terminates and local data is destroyed, this reference points to nothing.
weight& weight::sum_weight(weight& w2) { weight temp; //object local to function temp.gram=gram+w2.gram; temp.kilogram=temp.gram/1000; temp.gram=temp.gram%1000; temp.kilogram+=kilogram+w2.kilogram; return temp; //invalid }
To understand this concept, consider the function sum_weight () that is modified as shown in this code segment..
In this code segment, an attempt has been made to return the reference to an object of type weight (that is temp). However, it is not possible as the object temp is local to the sum_weight()function and a reference to this object remains effective only within the function. Thus, returning the reference to temp object outside the function generates a compile-time error.