Friend Function and Friend Classes in C++

Friend function

A non-member function cannot access private member of the class or object.

Member function can access private members of “same type or same class or object.

There could be a situation where more than one class where a function required to access private members of more than one type.

If function is declared as friend of any class, it can able to access private members.

Friend function is a non-member function, it is called like normal function. It is not bind with any object (OR) It is not called with object name.

Friend function in C++ cannot private members of directly it is having parameters of type class.

Friend return type function –name(parameters);

 

Example of Friend Function in C++

#include <iostream.h>

#include<conio.h>

class beta

class alpha

{

int x;

public:

void read-x();

friend void compare (alpha,bets);

};

class beta

{

int y;

public:

void read-y();

friend void compare(alpha,beta);

};

void alpha::read-x()

{

cout<<”\n Input x”;

cin>>x;

}

void beta::read-y()

{

cout<<”\n Input y@;

cin>>y;

}

void compare (alpha a, beta b)

{

if(

cout<<”\n Equal”;

else

cout <<”\n Not equal”;

}

void main()

{

alpha alpha1;

beta beta1;

alpha1.read-x();

beta1.read-y();

compare(alpha1,beta1);

(friend function)

}

 

Screenshot_21

 

 

#include <iostream.h>

#include<conio.h>

class Marks;

class Student

{

int rno;

char name[10];

public:

void read-student();

friend void find result(student name);

class marks

{

int sub1,sub2;

public:

void read-Marks();

friend void find –result (student,Marks);

};

void student:: read-student()

{

cout<<”\n Input rollno”;

cin>>rno;

cout<<”\n Input name”;

cin>>name;

}

void marks:: read-marks()

{

cout<<”\n  Input Marks”;

cin >>sub1>>sub2;

}

void find –result(student s,Marks M)

{

cout<<”\n Roll no”<<S.rno;

cout<<”\n Name”<<s.name;

if (M.sub1<40 M.sub2<40)

 

Screenshot_22

 

 

O/p:

Input name

RAM

Input roll no

101

Input Marks

 

//Friend function which operates on similar type objects

#include<iostream.h>

#include<conio.h>

class complex

{

float real,img;

public:

void read_complex();

void print_complex();

friend complex add-complex(complex,complex);

};

void complex::read_complex()

{

cout<<”\n Input real”);

cin>>real;

cout<<”\n Input img”;

cin>>img;

}

void complex:: print_complex()

{

cout<<”\n real=”<<real;

cout<<”\n img=”<img;

}

complex add_complex(complex c1,complex c2)

{

complex c3;

c3.real= c1.real+c2.real;

c3.img=c1.img+c2.img;

return c3;

}

void main()

{

clrscr();

complex comp1,comp2,comp3;

comp1.read_complex();

comp2.read_complex();

comp3=add__complex(comp1,comp2);

comp1.print__complex();

comp2.print__complex();

comp3.print__complex();

}

O/p Input real

1.1

input img

Friend class in C++

A friend of class can be function or class ,having full access rights to use private members

Syntax of Friend Class

friend class-name;

Example of Friend Class in C++

# include<iostream.h>

class student

{

int rno;

char name[10];

friend Marks;

};

class Marks

{

int sub1,sub2;

student stud;

public:

void read_marks()

{

cout<<”\n Input rno”;

cin>>stud.rno;

cout<<”\n Input Name;

cin>>stud.name;

cout <<”\n Input two subjects”;

cin>> stud.name;

cout<<”\n Input two subjects”;

cin>> stud.name;

cout<<”\n Input two subjects”;

cin>>sub1>>sub2;

}

void find-result()

{

cout<<”\n Roll no”<<stud.rno;

cout<<”\n Name”<<stud.name;

if(sub1<40|| sub2<40)

cout<<”\n Result Fail”;

else

cout<<”\n Result Pass”;

}};

void Main()

{

Marks stud1;

stud1.read_Marks();

stud1.find_result();

}

 

Example

# include <iostream,h>

class address

{

char hno[10];

char street[10];

public:

void read_address()

{

cout<<”\n Input hno”;

cin>>hno;

cout<<”\n Input street”;

cin>>street;

}

friend person;

};

class person

{

char name[10];

public:

void read_name()

{

cout<<”\n Input Name”;

cin>>name;

}

void print_details(address a)

{

cout<<”\n Name”<<name;

cout<<”\n Hno”<<a.hno;

cout<<”\n Street”<<a.street;

}};

void main()

{

Person p1;

address p1add;

p1.read_name();

p1add.read_address();

p1.print_details(p1add);

}