1) A non member function cannot have an access to the private data of a class. However there could be situation where we would like two classes to share a particular function. 

2) In such situation, C++ allows the common function to be made friendly with both the classes, thereby allowing the function to have access to the private data of these classes such a function need not be a member of any of these classes. 

3) The syntax for friend function is 

class ABC 
friend void function1(void); 

The function is declared with friend keyword. But while defining friend function. It does not use either keyword friend or :: operator.

A friend function, although not a member function, has full access right to the private member of the class. 

4) A friend, function has following characteristics. 

i) It is not in the scope of the class to which it has been declared as friend. 

ii) A friend function cannot be called using the object of that class. If can be invoked like a normal function without help of any object. 

iii) It cannot access the member variables directly & has to use an object name dot membership operator with member name. 

iv) It can be declared either in the public or the private part of a class without affecting its meaning. 

v) Usually, it has the object as arguments.

5) Ex- 

# include 

class sample 

        int a, b; 
        void setvalue() 
                a = 25; b = 40; 
        friend float mean (sample s); 
float mean(sample s) 

        return float(s.a + s.b)/ 2.0; 

main ( ) 

        sample x ; 
        cout << " Mean Value = "; 

output -

        Mean value = 32.5

6) Member function of one class can be friend functions of another class. In such cases they are defined using the scope resolution operator. 

EX - class x 
{ -------
int fun(); // member function of x 
class y 
friend int x : : fun() 
}; --------- 

7) We can declare all the member functions of one class as the friend functions of another class by declaring that class as a friend class. 

Ex - class z 
        { -------- 
        friend class x ; 

8) A friend function work as a bridge between the classes. Ex 

class ABC ; //forward declaration 
class xyz 

        int x; 
        void setvalue(int i) { x = i; } 
        friend void max (xyz, ABC); 
class ABC 

        int a; 
    public a: 
        void setvalue(int i) { a =i;} 
        friend void max(xyz, ABC); 
void max(xyz m, ABC n) // definition of friend. 

        if(m. x > = n. a) 
                cout << m .x; 
                cout << n.a; 

main ( ) 

        ABC K; 
        K. setvalue (20);
        XYZ l; l 
        setvalue (40);
        max (l , k); 

output is - 40 

9) A friend function can be called by reference. In this local copies of the object are not made. Instead, a pointer to the address of the object is passed and the called function directly works on the actual object used in the call. 

Ex-following program shows how to use a common friend function to exchange private value of two classes. 

# include 
class c2; 
class c1 

        int value1; 
        void indata (int a) {value1 = a;} 
        void display (void) {cout << value1;} 
        friend void exchange (c1 &, c2 &); 
class c2 

        int value2; 
        void indata (int a) {value 2 = a;} 
        void display (void) {cout << value2;} 
        friend void exchange (C1 &, C2 &) 
void exchange (cl &x, c2, &y) 
            int temp = x.value1; 
            x.value 1= y.value2; 
            y.value 2 = temp 


            c1 co1; 
            c2 co2; 
            co1. indata(10); 
            co2. indata(20) 
            cout << "Values before exchange"; 
            co1. display() 
            exchange(co1, co2); 
            cout << "values after exchange"; 

output of the program 
        values before exchange 
        values after exchange 


"friend function in C++"

"friend class in C++ example"

"use of friend function in C++""

"example of friend function"

"characteristics of friend function in C++"

"advantages of friend function in C++"

"friend function syntax"