Function in C++ Programming: Functions केवल इसलिए महत्वपूर्ण नहीं हैं क्योंकि ये किसी Object का एक मुख्य हिस्सा होते हैं, बल्कि Functions किसी Program को Organize करने का एक Basic तरीका होते हैं। Functions के बारे में अधिक जानकारी प्राप्त करने से पहले हम ये देखते हैं कि हमने अभी तक किस प्रकार से Functions के साथ काम किया है।
अभी तक हमने Functions को विभिन्न तरीकों से Use किया है। सबसे पहले तो हमने किसी Class के Data को Access करने के लिए Functions को Use किया है, जिन्हें Member Functions कहते हैं। साथ ही हमने Class के बाहर भी Functions को Use किया है। मुख्य रूप से हमने अभी तक किसी Class से बाहर Main Function को Use किया है। main() Function वह Function होता है, जहां से कोई भी “C++” का Program Compile होना शुरू करता है।
main() Function में हमने कई Built – In Library Functions जैसे कि getch(), strlen(), strcmp() आदि को भी Use किया है। Library Functions को Use करने के लिए हमें केवल उस Header File को अपने Source Program में Include करना होता है, जिसमें वह Function Define किया गया है, जिसे हम Use करना चाहते हैं।
जैसे getch() Function conio.h नाम की Header File में होता है। इसलिए हम हमारे Program में यदि इस Function को Use करना चाहते हैं, तो हमें हमारे Program में conio.h नाम की Header File को Include करना पडता है। चलिए, अब हम Function को थोडा गहराई से समझते हैं।
Function Calls
Function Code Statements का एक Block या Segment होता है। Function को Program के बाहर कहीं भी Define करके किसी भी अन्य Program में Call किया जा सकता है। एक जगह Create किया गया Function किसी अन्य Function में Call हो सकता है। जो Function किसी अन्य Function को अपनी जरूरत के अनुसार Use करना चाहता है, वह Function उस Required Function को Call करता है। किसी अन्य Function को Call करने वाला Function Calling Function कहलाता है और वह Function जिस Function को Call करता है, उसे Called Function कहते हैं।
Calling Function किसी अन्य Function को Call करते समय उसे कुछ Arguments भी प्रदान कर सकता है। ये Arguments उस Called Function के Data होते हैं जो उसे Calling Function से प्राप्त होते हैं। Called Function उस Data पर Processing करता है और वापस Calling Function को Processed Data Return करता है। Calling Function किसी Function को उसके नाम से Call करता है। जैसे निम्न User Defined Function एक Line Print करने का काम करता है:
#include <iostream.h> #include <conio.h> void PrintLine() { for(int I=0; I<40; I++) cout << "="; }
Main() Function Screen पर एक Line Print करने के लिए इस Function को निम्नानुसार Call कर सकता है:
// Program void main(void) { int a = 10, b = 20, c = 0; c = a + b; PrintLine(); cout << "\na is = 10" << endl; cout << "b is = 20" << endl; cout << "The total of a and b is " << c << endl; PrintLine(); getch(); } // Output a is = 10 b is = 20 The total of a and b is 30
इस Function में Calling Program से किसी प्रकार का मान नहीं भेजा जाता साथ ही ये Program किसी भी प्रकार का मान Calling Program को नहीं भेजता है। इस तरह के Functions को “Function with no Argument and no Return value” कहा जाता है।
Function Definitions
किसी भी Function में हमें तीन बातें Specify करनी होती हैं।
Function Name
हमें हमेंशा हमारे Function का एक उचित नाम रखना चाहिए। ताकि किसी Function को नाम से ही पहचाना जा सके कि वह Function किस काम के लिए लिखा गया है।
Function Arguments
किसी Function को Call करते समय यदि Calling Function Call किए जा रहे Function को कोई मान Pass करता है, तो हमें Called Function में ये बताना जरूरी होता है कि किस Data Type का मान Called Function Calling Function से प्राप्त करेगा। साथ ही हमें ये भी बताना होता है कि कितने मान Calling Function से Called Function को प्राप्त होंगे। ये Arguments हमें Function के कोद्गठक में Define करने होते हैं।
मानलो कि हम एक ऐसा Function लिखना चाहते हैं जिसमें Calling Program से जो Character User Defined Function को प्राप्त हो, Called Function उस Character को n बार Screen पर Print कर दे। इस स्थिति में Calling Function Called Function को Argument के रूप में एक Character Pass करता है। हम इस Function को निम्नानुसार Call कर सकते हैं:
RepeatCharacter(‘-‘, 20) ;
इस Function की Definition निम्नानुसार है:
void RepeatCharacter(char ch, int n) <--This line is the declaration { for(int j=0; j<n; j++) cout << ch; }
इस Function को Main Program से दो Argument प्राप्त होते हैं। पहला Argument वह Character है जिसे Screen पर n बार print करना है। इस Character को प्राप्त करने के लिए Function में char प्रकार का एक Variable ch Declare किया गया है। साथ ही दूसरा Argument ये बताता है कि Function उस Character को कितनी बार Print करेगा। ये मान Calling Program से Called Function को एक Integer प्रकार के Variable n में प्राप्त होता है।
Called Function Calling Program से आने वाले दोनों Arguments के आधार पर Character को n बार Screen पर Print कर देता है। यदि हम इस Character के स्थान पर = Character, व n के स्थान पर 40 लिख दें, तो इस Function को हम Main Program में निम्नानुसार Use कर सकते हैं, जो कि एक Line Print करेगा:
// Program #include <iostream.h> #include <conio.h> void PrintLine(char ch, int n) { for(int I=0; I<n; I++) cout << ch; } void main(void) { int a = 10, b = 20, c = 0; c = a + b; PrintLine('=', 40); cout << "\na is = 10" << endl; cout << "b is = 20" << endl; cout << "The total of a and b is " << c << endl; PrintLine('-', 40); getch(); } // Output a is = 10 b is = 20 The total of a and b is 30
हम देख सकते हैं कि हमने Calling Program से Data को Called Program में दो Variables ch व n में प्राप्त किया है। जब हम Calling Program से इस प्रकार किसी Called Function में Arguments के रूप में किन्हीं Variables में Data या मान प्राप्त करते हैं, तो इस प्रकार से मान Pass करके Function को Call करने की प्रक्रिया को “Calling Function Passing By Values” कहा जाता है।
तकनीकी रूप से जब हम Arguments शब्द का प्रयोग करते हैं तब इसका मतलब होता है कि Calling Function ने Called Function में Directly मानों को Specify किया गया है जबकि जब हम Parameters शब्द का प्रयोग करते हैं तो इसका मतलब होता है कि Calling Function ने Called Function में Variables में Stored मानों Pass किए हैं। हालांकि हम दोनों ही जगह पर सामान्य तरीके से Arguments का प्रयोग कर सकते हैं। इससे कोई फर्क नहीं पडता है।
Return Value Type
यदि Called Function Calling Function को कोई मान Return करता है तो वह Function किस Data Type का मान Calling Function को Return करेगा वह Data Type हमें Function के नाम के पहले Specify करना होता है। उदाहरण के लिए निम्न Function Calling program से Argument के रूप में Pounds लेता है और Calling Program को Pounds का मान Kilogram में Convert करके Return करता है:
float PoundsToKG(float pounds) <--declarator { float kilograms = 0.453592 * pounds; return kilograms; }
चूंकि, ये Function Calling Function से pounds का मान लेगा और Pounds को Kilogram में Convert करके Calling Program को Return करेगा। इसलिए हमने यहां Function के नाम के पहले float Keyword का प्रयोग किया है।
जब कोई Function Calling Program से कोई मान Argument के रूप में प्राप्त ना कर रहा हो तो Function के कोद्गठक में void लिखा जाता है और जब कोई Function Calling Function को कोई मान return नहीं कर रहा होता है, तब Return Data Type के स्थान पर void लिखा जा सकता है।
जैसे मानलो कि उपरोक्त Function यदि Calling Program को कोई मान Return ना करे तो हम इसे निम्नानुसार Define कर सकते हैं:
void PoundsToKG(float pounds) { float kilograms = 0.453592 * pounds; cout << “Pound = “ << pounds << endl ; cout << “Kilograms = “ << kilograms << endl; }
ये Function Calling Program को कोई मान Return नहीं करेगा। केवल Calling Function से एक मान प्राप्त करेगा और pounds को Kilograms में Convert करके Screen पर Print करेगा। इस Function को निम्नानुसार Statement द्वारा Call किया जा सकता है:
KGs = PoundsToKG(pounds)
Function Declarations
हमने अभी तक जितने भी Programs बना, हैं उनमें हमने देखा है कि विभिन्न प्रकार के सभी Functions किसी ना किसी Class के Member Functions थे और सभी Member Functions को main() Function अपनी आवश्यकतानुसार Call करता था। लेकिन हम किसी भी Function को किसी अन्य Function में Call कर सकते हैं। कोई भी Function किसी भी अन्य Function को Call कर सकता है चाहे Function किसी Class का Member Function हो या कोई Independent Function, लेकिन कोई भी Function कभी भी main() Function को Call नहीं कर सकता।
जब Compiler को किसी Function के विभिन्न Statements को Machine Language Instructions में Convert करना होता है, तब Compiler को Function के नाम व Function के विभिन्न Arguments के Data types व उनकी संख्या तथा Function के Return Value को जानने की जरूरत पडती है। जब Called Function को Calling Function से पहले Define किया जाता है तब Compiler को पता रहता है कि Call किए जा रहे में किस प्रकार के व कितने Arguments Pass किए जाएंगे और Function किस प्रकार का मान Return करेगा।
लेकिन जब Called Function का Definition Calling Function के बाद में या किसी अन्य File में होता है तब Compiler इन सभी बातों से अनजान रहता है। Compiler को पता नहीं होता है कि Called Function में किस प्रकार के मान Argument के रूप में आने चाहिए और Function किस प्रकार का मान Return करेगा।
इस स्थिति में यातो सभी Functions के Definitions सबसे पहले Create करने होते हैं या फिर हमें Called Function को सभी अन्य Functions से पहले Declare करना होता है। इस Declaration में हमें Function के नाम, Return Type व Arguments के Type को main() Program या Calling Function से पहले Declare करना होता है। Function के इस प्रकार के Declaration को Prototype Declaration कहा जाता है। हमने जो पिछला Function बनाया है उसका Prototype Declaration हम निम्नानुसार कर सकते हैं:
void PoundsToKG(float);
ये Statement Compiler को बताता है कि PoundsToKG नाम का जो Function है वह Argument के रूप में एक Float प्रकार का मान लेता है और Calling Program या Calling Function को किसी प्रकार का मान Return नहीं करता है। ये Statement हमें हमारे Program में Header Files को Include करने के बाद लिखना होता है। Function का Declaration करने के बाद हम हमारे Program में कहीं भी Function का Definition लिख सकते हैं।
जब हम कोई बडा Program लिख रहे होते हैं तो Program को सरल बनाने के लिए हम हमारे Main Program को कई छोटे-छोटे Functions में विभाजित कर सकते हैं और main() Function में आवश्यकतानुसार विभिन्न Functions को Call कर सकते हैं। User Defined Functions का प्रयोग हम तब करते हैं जब किसी काम को करने के लिए हमें बार-बार समान Coding को लिखना पड रहा हो।
जैसे मानलो कि हमे हमारे Main() Program में बार-बार दो संख्याओं को जोडने के लिए Code लिखने पड रहे हैं। ऐसे में हम दो संख्याओं को जोडने के लिए एक User Defined Function लिख लेते हैं और उस Function में दोनों जोडी जाने वाली संख्या, Arguments के रूप में भेज कर जोड के मान को Return करवा लिया जाता है। इस तरह से main() Function में हमें बार-बार समान प्रकार के Statements लिखने की जरूरत नहीं रहती है।
किसी Class का Member Function भी किसी User Defined Function को Call कर सकता है। जब किसी Class का कोई Member Function किसी User Defined Function को Call करता है तब उस Class में भी Called Function का Prototype पहले Declare करना पडता है उसके बाद उस User Defined Function को Member Function में Call किया जा सकता है। उदाहरण के लिए निम्न Code Segments देखिए:
class alpha { … void member_function() // member function { void UDFfunction(); // declaration of User Defined function … UDFfunction(); // call to User Defined function … } }; void UDFfunction() // definition of UDFfunction { // statements }
हम सोंच सकते हैं कि हमारे User Defined Functions को Use करने से पहले जिस प्रकार से Declare करना जरूरी होता है उसी तरह से क्या Library Functions को Declare करने की जरूरत नहीं होती?
इस सवाल का जवाब ये है कि Library Functions को भी Use करने से पहले Declare करना जरूरी होता है लेकिन हम जिस Function को Use करने के लिए जिस Header File को अपने Program में Include करते हैं, उस Header File में Library के उन सभी Functions के Declaration होते हैं, जो उस Library में Defined हैं। यानी यदि हम getch() Function Use करना चाहते हैं तो हम हमारे Program मे conio.h नाम की Header File को Include करते हैं।
इसी Header File में getch() Function को Declare भी किया गया है। यानी यदि हम हमारे Program में conio.h Header File को Include करते हैं तो इसका मतलब ये है कि हमने Use किए जा रहे Function को Declare भी कर लिया है और Define भी।
Standalone Member Functions
हमने विभिन्न Classes में विभिन्न Member Functions को Define किया है जिनमें आवश्यकतानुसार Loops व Decisions का प्रयोग भी किया है। जब हम किसी Member Function में Decision Making या Looping के Statements Use करते हैं, तो हमारा Compiler हमें Warning Message भी देता है।
इसका मतलब ये है कि हमें किसी Member Function में इन Special Statements को Use नहीं करना चाहिए। तो फिर कहां और किस प्रकार से इन Special Statements को Use किया जा सकता है, अब हम इसी विषय पर चर्चा करेंगे। (Function in C++ Programming – Wiki)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C++ Programming Language in Hindi | Page: 666 | Format: PDF