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

Ten questions in C/C++

Let us see some questions in C and C++ Write printf statement in C to print - I got 98% in Maths Can you execute a function before main() in C? If yes, how is it done? Can you write a program to find if a number is even without using modulo operator? How do you define a data member which is common to all objects of a class in C++? Can we have a single constructor for a class, but still create objects from the class passing zero/one and two parameters? What problems might occur if a class has no default constructor? Is the following statement correct? fprintf(stdout,"Hello world");   Why do we use the following statement in C++ program? using namespace std;  Can you write a single statement to check if the number is a power of 2?  What does the following statement mean in C/C++?4 if(a) b++;    So we have 10 questions. How many of these can you answer?   Do you need more questions in C and C++?    You can find t...

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)

Basics of C++

Let us talk about some basics of the language.  Identifiers  All variables and functions and objects need a name - they need identifiers. Identifiers in C++ need to follow some simple rules      They need to start with either a-z/A-Z or _ (underline)      They can contain only alphabets, digits or underline      They need to be unique in their scope      They can not be keywords Examples of some bad identifiers    1var    sum of numbers    int Data types :  C++ has the following basic data types. We will talk about classes and objects later     int     float     char     double     bool int An int data type is used to store integer values. e.g.   int a=10; int b = -100;   float and double  are used to store real numbers. double ...