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
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
Post a Comment