C++ functions that return values – One of the most useful forms of function is the one that returns a value. In this case the type given to the function is that of the value to be returned. Thus consider the function, to which the co-ordinates of a point(x,y) are supplied as the input and returns the distance of the point from the origin as the output.
float distance (float x, float y)
//Returns the distance of (x ,y) from origin
float dist; //local variable
dist = sqrt(x * x +y*y);
The function prototype for this function is:
Float distance (float, float); //function prototype
This function introduces several new features such as:
- The function has been given the type float because it is going to return a float value.
- The parameter-list now has two parameters, namely, x and y. Each parameter is declared by giving its type and comma separates name and successive parameter declarations.
- A local variable dist has been declared to temporarily hold the calculated distance.
- Because this function returns a value it includes a return statement, which returns the value. In a statement return value the value may be a constant, a variable or an expression. Hence the use of local variable dist was not essential since the return statement could have been written.
- return sqrt(x * x +y*y);
When the function is called, the formal parameters x and y are replaced by actual parameters of type float and in the same order, i.e. the x co-ordinate first. Since the function returns a value it can only be used in an expression.
Hence the following examples of the use of the above function in a C++ program in which it is declared:
Float a, b, c, d, x, y;
d = 2.6;
x = distance(a , b);
y = distance(c , d);
if (distance(4.1,6.7) >distance(x,y))
cout<<”Message 1” << endl;
A function may have several return statements. This is illustrated in the following function which implements the algorithm for evaluating the square root previously considered.
float mysqurt(float x)
//Function returns square root of x.
// If x is negative it returns zero.
const float tol =1.0e-7; // 7 significant figures
float xold, xnew; // locat variables
return 0.0; //covers –ve and zero case
xold=x; // x as first approx
x new = 0.5*(xold+x/xold); //better approx
xold = xnew;
xnew = 0.5*(xold+x/xold);
return xnew; // must return float value
} //end mysqrt
If the function has type void then it must not return a value. If a void function does return a value then most compilers will issue some form of warning message that a return value is not accepted.