Welcome~~~


Another blog:
http://fun-st.blogspot.com/

It is easier to write an incorrect program than understand a correct one.

Monday, February 14, 2011

C++ Friend Functions

C++ Friend Functions

A friend function is an outsider function which can access the private or protected class members of the class to which it has been a friend.also it does not need SRO(::) for invocation it gets executed as a normal function and also does not need any object to make a call for its invocation, it accesses the pvt. class members using indirection operator(-->).A function is made the friend to any class by placing the keyword friend before its declaration inside the class definition and its definition resides outside the class a friend function to any class may simultaneously work as the member function to any other class.the main function of a friend function is to act as a bridge between two diff. classes.

Need for Friend Function:

As discussed in the earlier sections on access specifiers, when a data is declared as private inside a class, then it is not accessible from outside the class. A function that is not a member or an external class will not be able to access the private data. A programmer may have a situation where he or she would need to access private data from non-member functions and external classes. For handling such cases, the concept of Friend functions is a useful tool.

What is a Friend Function?

A friend function is used for accessing the non-public members of a class. A class can allow non-member functions and other classes to access its own private data, by making them friends. Thus, a friend function is an ordinary function or a member of another class.

How to define and use Friend Function in C++:

The friend function is written as any other normal function, except the function declaration of these functions is preceded with the keyword friend. The friend function must have the class to which it is declared as friend passed to it in argument.

Some important points to note while using friend functions in C++:
    The keyword friend is placed only in the function declaration of the friend function and not in the function definition. .
  • It is possible to declare a function as friend in any number of classes.
    .
  • When a class is declared as a friend, the friend class has access to the private data of the class that made this a friend.
    .
  • A friend function, even though it is not a member function, would have the rights to access the private members of the class.
    .
  • It is possible to declare the friend function as either private or public.
    .
  • The function can be invoked without the use of an object. The friend function has its argument as objects, seen in example below.

Example to understand the friend function:



#include
class exforsys
{
private:
int a,b;
public:
void test()
{
a=100;
b=200;
}
friend int compute(exforsys e1)


//Friend Function Declaration with keyword friend and with the object of class exforsys to which it is friend passed to it
};


int compute(exforsys e1)
{
//Friend Function Definition which has access to private data
return int(e1.a+e2.b)-5;
}

main()
{
exforsys e;
e.test();
cout<<"The result is:"<
//Calling of Friend Function with object as argument.
}

The output of the above program is

The result is:295

The function compute() is a non-member function of the class exforsys. In order to make this function have access to the private data a and b of class exforsys , it is created as a friend function for the class exforsys. As a first step, the function compute() is declared as friend in the class exforsys as:

friend int compute (exforsys e1)
The keyword friend is placed before the function. The function definition is written as a normal function and thus, the function has access to the private data a and b of the class exforsys. It is declared as friend inside the class, the private data values a and b are added, 5 is subtracted from the result, giving 295 as the result. This is returned by the function and thus the output is displayed as shown above.

No comments:

Post a Comment