Skip to main content

Friends of C++

Friend function
Remember that a member which is not public (Private and protected )  can not be accessed from outside the class. 

Three are some situations where you may need to access these. Keyword friend  is used for this. A friend functions and classes can access all members of a class. 

This concept is controversial. People say friend concept violates data encapsulation 

A friend function is a non-member function but still can access all the members of a class including private members. Such a function is declared within class body with the prefix "friend"

class Number
{
 int num;
public:
 Number(int m){/*code*/}
 friend void printNum(Number ob);/*friend function*/
};

void printNum(Number obj)
{
 cout<<obj.num<<"endl";
}

printNum() is not member of class Number. But it can still access all members including private members, because it is a friend.

Friend class

An object of a friend class can access all the members of a class.

#include<iostream>
using std::cout;
class A;
class Number
{
 int num;
public:
 Number(int a):num(a){};
 friend class A;
};
class A
{
public:
 void printNumber(Number ob){cout<<ob.num;}
 int getNumber(Number ob){return ob.num;}
};
int main()
{
 A ob1;
 Number ob2(10);
 ob1.printNumber(ob2); 
}

Output
10

ob1 - is an object of A class. So it should not be able to access private members of Number class. But as A class is declared as a friend of Number class. So printNumber() and getNumber() functions of A class can access private data num of Number class.

Declaration of class A above class Number is called forward declaration. You need to use forward declaration for friend class.


Comments

Popular posts from this blog

Find the error in C++ program

This C++ program is not compiling. What do you think is the error with the program? #include<iostream> using namespace std; int main() {    int arr[10];    arr={1,2,3,4,5,6,7,8};    cout<<"arr[0]="<<arr[0];    return 0; } Is the error due to Not using printf Initialising the array with only 8 elements instead of 10 Initialising array in the next statement instead of in definition. None of the above  Now if you like this question, there are plenty more questions like this and programs and notes in my app Simplified C++. Download the Simplif ied C++   by Hegdeapps now By the way the correct answer is (3)

C quizard app

C Quizard is an app which will make you from newbie in C to C wizard. The app has quiz on various topics, solved programs with explanations. It also lets you take a 25 question quiz any time offline. You can download CQuizard by Hegdeapps from google play.