by Dinesh Thakur Category: Classes in C++

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);

wl.getdata();

cout<<" \n Enter weight #2" ;

w2.getdata();

w3.sum_weight(wl,w2);

cout<<"/n Weight #1 = ";

wl.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.

                            Result return from temp 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.

To understand this concept, consider the function sum_weight () that is modified as shown in this code segment..

 

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

}

 

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.



About Dinesh Thakur

Dinesh ThakurDinesh Thakur holds an B.SC (Computer Science), MCSE, MCDBA, CCNA, CCNP, A+, SCJP certifications. Dinesh authors the hugely popular blog. Where he writes how-to guides around Computer fundamental , computer software, Computer programming, and web apps. For any type of query or something that you think is missing, please feel free to Contact us.



Search Content







Popular Article