Friend Function & Friend Class in C++ Notes | Friend Function, Friend Class, Advantages & Applications | Basic Computer Engineering | RGPV BTech First Year
Friend Function & Friend Class in C++ Notes | Friend Function, Friend Class, Advantages & Applications | Basic Computer Engineering | RGPV BTech First Year
Friend Function & Friend Class in C++
Friend Function C++ Object Oriented Programming का एक महत्वपूर्ण Concept है। सामान्यतः किसी Class के Private तथा Protected Members को केवल उसी Class के Member Functions द्वारा Access किया जा सकता है, लेकिन Friend Function इस नियम का एक विशेष अपवाद (Exception) है।
Friend Function Class का Member Function नहीं होता, फिर भी उसे Class के Private तथा Protected Members को Access करने की अनुमति (Permission) प्राप्त होती है। इसी प्रकार Friend Class भी दूसरी Class के Private तथा Protected Members को Access कर सकती है।
RGPV B.Tech First Year के Basic Computer Engineering Subject में Friend Function & Friend Class अत्यंत महत्वपूर्ण Topic है। University Examination, Practical तथा Viva में Friend Function की Definition, Syntax, Characteristics, Friend Class तथा Friend Function एवं Member Function के Difference से संबंधित प्रश्न नियमित रूप से पूछे जाते हैं।
↓
friend Keyword
↓
Friend Function
↓
Private Members Access
Introduction to Friend Function
Object Oriented Programming का मुख्य उद्देश्य Data Hiding तथा Data Security प्रदान करना होता है। सामान्य परिस्थितियों में किसी Class के Private Members को बाहरी Functions द्वारा Access नहीं किया जा सकता।
लेकिन कुछ परिस्थितियों में किसी External Function को Class के Private Data पर कार्य करने की आवश्यकता होती है। ऐसी स्थिति में C++ Friend Function की सुविधा प्रदान करता है। Friend Function Class का Member नहीं होता, फिर भी उसे Private तथा Protected Members को Access करने की अनुमति मिल जाती है।
What is Friend Function?
Friend Function ऐसा Function होता है जिसे किसी Class के अंदर friend Keyword द्वारा Declare किया जाता है। यह Function Class का Member नहीं होता, लेकिन Class के Private एवं Protected Members को सीधे Access कर सकता है।
ऊपर दिए गए उदाहरण में display() Function Class का Member नहीं है, लेकिन Friend Function होने के कारण यह Class के Private Data को Access कर सकता है।
Need of Friend Function
जब किसी बाहरी Function को एक या एक से अधिक Classes के Private Data पर कार्य करना हो, तब Friend Function का उपयोग किया जाता है। इससे Program अधिक Flexible बनता है तथा आवश्यक Data Sharing संभव हो जाती है।
- Private Members को Controlled तरीके से Access करने के लिए।
- दो या अधिक Classes के बीच Data Sharing करने के लिए।
- Operator Overloading में सहायता के लिए।
- External Utility Functions बनाने के लिए।
- Complex Calculations को Class के बाहर Implement करने के लिए।
- Code को अधिक Modular बनाने के लिए।
- Specific Functions को Special Access देने के लिए।
Advantages of Friend Function
| Advantage | Description |
|---|---|
| Private Data Access | Private तथा Protected Members को Access कर सकता है। |
| Data Sharing | एक से अधिक Classes के बीच Data Sharing आसान होती है। |
| Operator Overloading | Complex Operator Overloading में उपयोगी होता है। |
| Modular Programming | Class के बाहर Utility Functions बनाए जा सकते हैं। |
| Flexible Design | Program Design अधिक Flexible बनता है। |
Characteristics of Friend Function
Friend Function की कुछ विशेष विशेषताएँ (Characteristics) होती हैं जो इसे सामान्य Member Function से अलग बनाती हैं। यद्यपि यह Class का Member नहीं होता, फिर भी इसे Class के Private तथा Protected Members को Access करने की अनुमति होती है।
- Friend Function Class का Member Function नहीं होता।
- इसे Class के अंदर friend Keyword द्वारा Declare किया जाता है।
- यह Private तथा Protected Members को सीधे Access कर सकता है।
- Friend Function को Object के माध्यम से Call नहीं किया जाता।
- यह सामान्य Function की तरह Call किया जाता है।
- एक Friend Function कई Classes का Friend हो सकता है।
- Friend Function के अंदर this Pointer उपलब्ध नहीं होता।
Rules of Friend Function
Friend Function Declare करते समय C++ के कुछ महत्वपूर्ण नियमों का पालन करना आवश्यक होता है।
| Rule | Description |
|---|---|
| friend Keyword | Function को friend Keyword द्वारा Declare किया जाता है। |
| Not a Member | Friend Function Class का Member नहीं होता। |
| Object Required | Private Members Access करने के लिए Object Receive करना आवश्यक होता है। |
| Normal Function Call | इसे सामान्य Function की तरह Call किया जाता है। |
| Multiple Friends | एक Function अनेक Classes का Friend हो सकता है। |
Syntax of Friend Function
Friend Function Declare करने की सामान्य Syntax नीचे दी गई है।
ऊपर दिए गए उदाहरण में display() Function Friend Function के रूप में Declare किया गया है।
Working of Friend Function
↓
friend Declaration
↓
Friend Function
↓
Object Passed
↓
Private Data Access
Friend Function Class का Member नहीं होने के कारण उसे Object के माध्यम से Class के Members तक पहुँचना होता है। Object Receive करने के बाद वह Private एवं Protected Members को Access कर सकता है।
Program using Friend Function
Output
इस उदाहरण में marks Private Data Member है। सामान्य Function इसे Access नहीं कर सकता, लेकिन Friend Function होने के कारण display() सीधे s.marks को Access कर रहा है।
Friend Function vs Member Function
| Friend Function | Member Function |
|---|---|
| Class का Member नहीं होता। | Class का Member होता है। |
| Object को Argument के रूप में Receive करता है। | Object के माध्यम से सीधे Call होता है। |
| this Pointer उपलब्ध नहीं होता। | this Pointer उपलब्ध होता है। |
| friend Keyword द्वारा Declare किया जाता है। | Class के अंदर सामान्य Function की तरह Declare किया जाता है। |
| Private Data को Permission मिलने पर Access करता है। | Private Data को सीधे Access कर सकता है। |
Accessing Private Members using Friend Function
Friend Function का सबसे महत्वपूर्ण कार्य Class के Private तथा Protected Members को Access करना है। चूँकि Friend Function Class का Member नहीं होता, इसलिए उसे Object के माध्यम से Data Members तक पहुँच प्राप्त होती है।
ऊपर दिए गए उदाहरण में show() Function Class का Member नहीं है, फिर भी यह Private Member number को Access कर सकता है।
Friend Function Accessing Multiple Classes
एक ही Friend Function को एक से अधिक Classes का Friend बनाया जा सकता है। ऐसी स्थिति में वह सभी संबंधित Classes के Private तथा Protected Members को Access कर सकता है।
↘
Friend Function
↗
Class B
यह सुविधा विशेष रूप से तब उपयोगी होती है जब दो या अधिक Classes के Data का संयुक्त रूप से उपयोग करना हो।
Example using Two Classes
ऊपर दिए गए उदाहरण में display() Function दोनों Classes का Friend है, इसलिए यह दोनों Classes के Private Members को Access कर सकता है।
Limitations of Friend Function
यद्यपि Friend Function उपयोगी होता है, लेकिन इसका अत्यधिक उपयोग Object Oriented Programming के मूल सिद्धांत Data Hiding को प्रभावित कर सकता है। इसलिए इसका उपयोग केवल आवश्यक परिस्थितियों में करना चाहिए।
- Data Encapsulation कमज़ोर हो सकती है।
- Private Data की Security प्रभावित हो सकती है।
- Program की Complexity बढ़ सकती है।
- Maintenance कठिन हो सकती है।
- Object Oriented Design के सिद्धांतों का उल्लंघन हो सकता है।
- अनावश्यक Friend Functions Program को कम Secure बना सकते हैं।
When to Use Friend Function?
Friend Function का उपयोग केवल उन्हीं परिस्थितियों में करना चाहिए जहाँ वास्तव में किसी External Function को Class के Private Data पर कार्य करने की आवश्यकता हो।
| Situation | Reason |
|---|---|
| Operator Overloading | Complex Operators Implement करने के लिए। |
| Multiple Classes | दो या अधिक Classes के Private Data पर कार्य करने के लिए। |
| Utility Functions | Reusable External Functions बनाने के लिए। |
| Special Processing | Specific Calculations एवं Data Manipulation के लिए। |
Real Life Example of Friend Function
मान लीजिए किसी Bank Management System में Account Class का Balance Private रखा गया है। यदि एक अलग Interest Calculation Function को Balance Access करके ब्याज (Interest) Calculate करना हो, तो उसे Friend Function बनाया जा सकता है। इससे बिना Public Data उपलब्ध कराए आवश्यक Calculation संभव हो जाती है।
Friend Class
Friend Class C++ का एक महत्वपूर्ण Feature है जिसके माध्यम से एक पूरी Class को दूसरी Class के Private तथा Protected Members को Access करने की अनुमति दी जाती है। यदि किसी Class को Friend Class घोषित किया जाता है, तो उसके सभी Member Functions दूसरी Class के Private Data को Access कर सकते हैं।
Friend Function केवल एक Function को विशेष Permission देता है, जबकि Friend Class अपनी पूरी Class के सभी Member Functions को Access की अनुमति प्रदान करती है।
Need of Friend Class
जब दो Classes के बीच गहरा संबंध (Close Relationship) हो तथा एक Class को दूसरी Class के Private Data पर कार्य करना आवश्यक हो, तब Friend Class का उपयोग किया जाता है।
- दो Classes के बीच Data Sharing के लिए।
- Private Members को Controlled तरीके से Access करने के लिए।
- Complex Object Oriented Applications विकसित करने के लिए।
- Related Classes के बीच Communication आसान बनाने के लिए।
- Large Software Projects में Code Reusability बढ़ाने के लिए।
- Special Utility Classes बनाने के लिए।
Syntax of Friend Class
Friend Class Declare करने के लिए friend class Keyword का उपयोग किया जाता है।
ऊपर दिए गए उदाहरण में Class B, Class A की Friend Class है।
Working of Friend Class
↓
friend class B
↓
Class B
↓
Private Members Access
जब किसी Class को Friend Class घोषित किया जाता है, तब उस Friend Class के सभी Member Functions दूसरी Class के Private तथा Protected Members को सीधे Access कर सकते हैं।
Example of Friend Class
Output
ऊपर दिए गए उदाहरण में Class B, Class A की Friend Class है। इसलिए display() Function, value नामक Private Data Member को सीधे Access कर पा रहा है।
Friend Function vs Friend Class
| Friend Function | Friend Class |
|---|---|
| केवल एक Function को Permission दी जाती है। | पूरी Class को Permission दी जाती है। |
| friend Keyword द्वारा Function Declare किया जाता है। | friend class Keyword द्वारा Declare किया जाता है। |
| Specific Processing के लिए उपयोगी। | Related Classes के बीच Data Sharing के लिए उपयोगी। |
| कम Access Permission प्रदान करता है। | अधिक Access Permission प्रदान करता है। |
Advantages of Friend Class
- Related Classes के बीच Communication आसान हो जाता है।
- Private Data को Controlled तरीके से Access किया जा सकता है।
- Complex Software Design को सरल बनाता है।
- Data Sharing अधिक Efficient होती है।
- Large Object Oriented Applications में उपयोगी होता है।
- Reusable Utility Classes विकसित की जा सकती हैं।
Limitations of Friend Class
यद्यपि Friend Class कई परिस्थितियों में उपयोगी होती है, लेकिन इसका अत्यधिक उपयोग Object Oriented Programming के मूल सिद्धांत Data Hiding तथा Encapsulation को प्रभावित कर सकता है। इसलिए Friend Class का उपयोग केवल आवश्यकता होने पर ही करना चाहिए।
- Data Security कम हो सकती है।
- Encapsulation का उल्लंघन हो सकता है।
- Program की Complexity बढ़ सकती है।
- Maintenance कठिन हो सकती है।
- Private Data अधिक Accessible हो जाता है।
- Large Projects में Dependency बढ़ सकती है।
Applications of Friend Function
Friend Function का उपयोग उन Applications में किया जाता है जहाँ किसी External Function को Class के Private Data पर कार्य करना आवश्यक हो।
| Application | Purpose |
|---|---|
| Operator Overloading | Complex Operators Implement करना। |
| Mathematical Processing | Private Data पर Calculations करना। |
| Banking Software | Interest एवं Balance Processing। |
| Scientific Applications | Complex Data Processing। |
| Utility Functions | Reusable External Functions बनाना। |
Applications of Friend Class
| Application | Purpose |
|---|---|
| Inventory System | Multiple Related Classes के बीच Data Sharing। |
| Library Management | Book एवं Member Classes के बीच Communication। |
| Hospital Management | Patient एवं Billing Classes के बीच Data Access। |
| Payroll System | Employee एवं Salary Classes का Integration। |
| ERP Software | Multiple Modules के बीच Secure Data Sharing। |
Friend Function vs Public Member Function
| Friend Function | Public Member Function |
|---|---|
| Class का Member नहीं होता। | Class का Member होता है। |
| friend Keyword द्वारा Declare किया जाता है। | Public Section में Declare किया जाता है। |
| Object Argument के रूप में Receive करता है। | Object के माध्यम से सीधे Call होता है। |
| this Pointer उपलब्ध नहीं होता। | this Pointer उपलब्ध होता है। |
| Permission मिलने पर Private Members Access करता है। | अपने Class के Members को सीधे Access करता है। |
Best Practices for Using Friend Function
- Friend Function का उपयोग केवल आवश्यकता होने पर करें।
- Private Data को अनावश्यक रूप से Expose न करें।
- Data Hiding के सिद्धांत का सम्मान करें।
- Friend Class केवल Related Classes के लिए Declare करें।
- Large Projects में Friend Functions की संख्या सीमित रखें।
- Program Security तथा Maintainability का ध्यान रखें।
Real Life Example
मान लीजिए किसी University Management System में Student तथा Result दो अलग-अलग Classes हैं। यदि Result Class को Student के Private Marks Access करके Grade Calculate करना हो, तो Result को Friend Class अथवा Grade Calculation Function को Friend Function बनाया जा सकता है। इससे आवश्यक Data Access भी मिलता है और Program का Structure भी व्यवस्थित बना रहता है।
Advantages of Friend Function and Friend Class
- Private तथा Protected Members को Controlled तरीके से Access किया जा सकता है।
- दो या अधिक Classes के बीच Data Sharing आसान हो जाती है।
- Operator Overloading को सरल बनाता है।
- Complex Object Oriented Programs में Flexibility प्रदान करता है।
- Reusable Utility Functions विकसित किए जा सकते हैं।
- Related Classes के बीच Communication अधिक Efficient होता है।
- Large Software Projects में Code Reusability बढ़ती है।
Disadvantages of Friend Function and Friend Class
- Data Hiding का सिद्धांत कमजोर हो सकता है।
- Encapsulation प्रभावित हो सकती है।
- Private Data की Security कम हो सकती है।
- Program की Complexity बढ़ सकती है।
- Maintenance कठिन हो सकती है।
- Friend Declaration का अत्यधिक उपयोग Program Design को प्रभावित कर सकता है।
Summary
| Concept | Description |
|---|---|
| Friend Function | Class का Member न होते हुए भी Private तथा Protected Members को Access कर सकता है। |
| Friend Class | एक पूरी Class को दूसरी Class के Private Members Access करने की अनुमति देता है। |
| friend Keyword | Friend Function तथा Friend Class Declare करने के लिए उपयोग किया जाता है। |
| Private Access | Permission मिलने पर Private एवं Protected Members को Access किया जा सकता है। |
| Operator Overloading | Friend Function का महत्वपूर्ण उपयोग। |
| Data Sharing | Related Classes के बीच सुरक्षित Data Sharing। |
Important Viva Questions
- Friend Function क्या है?
- Friend Function की आवश्यकता क्यों होती है?
- Friend Function की मुख्य विशेषताएँ लिखिए।
- Friend Function तथा Member Function में क्या अंतर है?
- Friend Class क्या है?
- Friend Function तथा Friend Class में क्या अंतर है?
- Friend Function Private Members को कैसे Access करता है?
- Friend Function में this Pointer क्यों उपलब्ध नहीं होता?
- Friend Class का उपयोग कहाँ किया जाता है?
- Friend Function की Limitations क्या हैं?
University Examination Important Questions
- Friend Function की परिभाषा उदाहरण सहित समझाइए।
- Friend Function की Syntax एवं Characteristics लिखिए।
- Friend Function तथा Member Function में अंतर लिखिए।
- Friend Class क्या है? उदाहरण सहित समझाइए।
- Friend Function एवं Friend Class में अंतर लिखिए।
- Friend Function के Advantages एवं Disadvantages लिखिए।
- Friend Class के Applications समझाइए।
- Friend Keyword का उपयोग उदाहरण सहित समझाइए।
- Friend Function द्वारा Private Members को कैसे Access किया जाता है?
- Object Oriented Programming में Friend Function की भूमिका स्पष्ट कीजिए।
Exam Tips
- हमेशा याद रखें कि Friend Function Class का Member Function नहीं होता।
- Friend Function को friend Keyword द्वारा Declare किया जाता है।
- Friend Function Private एवं Protected Members को Access कर सकता है।
- Friend Function में this Pointer उपलब्ध नहीं होता।
- Friend Class के सभी Member Functions दूसरी Class के Private Members Access कर सकते हैं।
- Friend Function तथा Friend Class के कम से कम पाँच अंतर परीक्षा के लिए तैयार रखें।
Conclusion
Friend Function तथा Friend Class C++ Object Oriented Programming के महत्वपूर्ण Features हैं, जिनकी सहायता से किसी Class के Private तथा Protected Members को नियंत्रित (Controlled) तरीके से Access किया जा सकता है। Friend Function सामान्य Function होते हुए भी विशेष Permission प्राप्त करता है, जबकि Friend Class दूसरी Class के सभी Member Functions को Access की अनुमति देती है। Operator Overloading, Data Sharing, Scientific Computing तथा Enterprise Applications में इनका व्यापक उपयोग किया जाता है। RGPV B.Tech First Year के विद्यार्थियों के लिए Friend Function एवं Friend Class Theory, Practical तथा Viva तीनों दृष्टिकोण से अत्यंत महत्वपूर्ण Topics हैं।
Related Articles
Arrays of Objects in C++ Notes | Object Array, Declaration, Initialization & Examples | Basic Computer Engineering | RGPV BTech First Year
Arrays ...
Read More →Object as Function Argument & Returning Object from Function in C++ Notes | Pass Object to Function, Return Object & Examples | Basic Computer Engineering | RGPV BTech First Year
Object ...
Read More →Pointers to Objects in C++ Notes | Object Pointer, Accessing Members using Pointer & Examples | Basic Computer Engineering | RGPV BTech First Year
Pointer...
Read More →Dynamic Memory Allocation in C++ Notes | new & delete Operators, Heap Memory, Dynamic Objects & Examples | Basic Computer Engineering | RGPV BTech First Year
Dynamic...
Read More →this Pointer in C++ Notes | this Keyword, Uses, Advantages & Examples | Basic Computer Engineering | RGPV BTech First Year
this Po...
Read More →