C++ Functions

Introduction to C++ Functions

एक function कुछ programming statements का group होता है। ये statements एक particular task perform करते है जैसे की addition या फिर area calculate करना आदि। हर function का unique नाम होता है। इस नाम के द्वारा आप function को program में कँही भी यूज़ कर सकते है। इसे function को call करना कहते है।

Functions को यूज़ करने से आपको program में एक ही code को बार बार लिखने की आवश्यकता नहीं होती है। आप एक function create कर सकते है और उसे program में कँही भी यूज़ कर सकते है। Functions को यूज़ करने से आपका program ज्यादा readable बन जाता है जिसे आसानी से debug किया जा सकता है।

C++ में 2 प्रकार के functions पाए जाते है।

  • Built in functions - ये वे functions होते है जो C++ आपको पहले से libraries के द्वारा provide करती है।
  • User defined functions - ये वे functions होते है जो programmers खुद create करते है। सबसे common user defined function main() होता है। इसके बारे में निचे दिया जा रहा है।

main() Function

main() function आपके program का starting point होता है। C Language में main() function का return type नहीं specify किया जाता है लेकिन C++ में main() function integer return करता है। इसलिए C++ में आप main() function का return type देते है। इसका उदाहरण निचे दिया जा रहा है।

int main()

जब भी किसी function का return type define किया जाता है तो function एक value return करता है। इसलिए आप main() function के अंत में return zero statement define करते है। इसका उदाहरण निचे दिया जा रहा है।

return 0;

Creating Functions in C++

C++ में आप functions 2 steps में create करते है।

  1. Function Declaration/Prototyping
  2. Function Definition

इन steps के बारे में निचे detail से दिया जा रहा है।

Function Declaration/Prototyping

जब भी आप C++ में कोई function create करते है तो सबसे पहले आप function prototype define करते है। Function prototype compiler को function के बारे में basic जानकारी provide करता है। जैसे की -

  1. return type - Function किस तरह की value return करेगा।
  2. Name - Function को किस नाम से call किया जायेगा।
  3. Parameters - Function में किस type के और कितने arguments pass किये जा सकते है।

इस जानकारी को compiler function को call और execute करने के लिए यूज़ करता है। आइये अब देखते है की आप किस तरह एक function prototype define कर सकते है। इसका general syntax निचे दिया जा रहा है।

return_type function-name (parameter1, parameter 2, ...parameter n);

जब भी आप function का prototype define करते है तो सबसे पहले function return type define करते है। ये कोई भी data type हो सकता है जैसे की int, float आदि। इसके बाद आप function का एक unique नाम देते है। इसके बाद आप parameters define करते है। ये वो values होती है जो आप function को call करते समय pass करेंगे। Parameters के साथ आप उनका type भी define करते है। आइये इसे एक उदाहरण से समझने का प्रयास करते है।

मान लीजिये आप एक function create कर रहे जो 2 integer numbers को argument के रूप में लेता है और उनको multiply करके result return करता है। इस function के लिए prototype आप इस प्रकार define कर सकते है।

int mul (int a, int b);

Function Definition

Function definition एक block होता है जिसमे आप उन statements को लिखते है जिन्हें आप function call होने पर execute करना चाहते है। Function definition को function declaration/prototype की तरह ही define किया जाता है। लेकिन इसे semicolon से end नहीं किया जाता है और curly braces के अंदर आप वो statements लिखते है जिन्हें आप execute करना चाहते है। Function definition का structure निचे दिया जा रहा है।

return-type function-name (parameter1, parameter2,......parameter n)
{
    //statements
}

आइये अब इसको उदाहरण से समझते है। निचे उसी function की definition create की गयी है जिसका prototype ऊपर create किया गया था।

int mul(int a, int b)
{
   return a*b;
}

Using Functions

एक बार function create करने के बाद आप उसे यूज़ करते है। Program में जँहा भी आप function को यूज़ करना चाहते है वँहा आप उसे call करते है। Function को call करते समय आप उसमे required arguments pass करते है। इन arguments का type वही होना चाहिए जो आपने parameters define करते समय दिया था नहीं तो compiler error generate करता है।

यदि किसी function में argument नहीं pass करने हो तो आप simply brackets लगा कर semicolon लगा देते है। Function Call करने का basic syntax निचे दिया जा रहा है।

function-name(argument1, argument2,......argument n);

उदाहरण के लिए यदि आप ऊपर create किये गए function को call करना चाहते है तो इस प्रकार करेंगे।

mul(3,8);

ऊपर दिए गए उदाहरण में mul() function को call किया गया है। Function को declare करते समय parameters का type int दिया गया था इसलिए यँहा पर मैने दो integer values pass की है। ये function इन दोनों values को multiply करके result return करेगा।

आप चाहे तो directly value ना pass करते हुए 2 integer variables भी pass कर सकते है। जैसे की निचे दिए गए उदाहरण को देखिये।

int a = 3;
int b = 8;

mul(a,b);

यदि आप ऊपर दिए गए उदाहरण की तरह भी function को call करेंगे तो result same ही होगा। निचे functions के use का एक complete उदाहरण दिया जा रहा है।

#include <iostream>

int mul(int a, int b);

int main()
{
    int a=2;
    int b=3;

    cout<<"Multiplication of 2 & 3 is : "<<mul(a,b);
}

int mul(int a, int b)
{
       return a*b;
}

ऊपर दिया गया program निचे दिया गया output generate करता है।

Multiplication of 2 & 3 is : 6

Call By Reference

जब आप किसी function को call करते समय जो value pass करते है तो वो parameter variables को assign हो जाती है। जितने भी changes होते है वो इन parameter variables पर ही होते है और जो actual variables होते है उनकी values में कोई changes नहीं होता है।

उदाहरण के लिए मान लीजिये आपने के increment() function create किया है जो variable की value को 1 number से increase करता है।

void increment(int a)
{
   a=a+1;
}

ऊपर create किये गए function को call करते समय इसमें आप इस प्रकार एक variable pass करेंगे।

int a=10;
increment(a);

Function की definition के हिसाब से जब function call हो तो a variable की value 10 से 11 हो जानी चाहिए। लेकिन ऐसा नहीं होगा। Function के अंदर variable में जो change किया गया है वह parameter variable को effect करेगा यानी की इस a की value सिर्फ function में ही 11 होगी। Function के बाहर original variable वैसा का वैसा रहेगा। यदि आप function से ही a की value print करवाते है तो value 11 ही print होगी।

कई बार programming करते समय ऐसी situations भी आती है की आपको original variable की value change करनी होती है। उदाहरण के लिए यदि कोई website अपने visitors की संख्या count करने के लिए function create करती है तो जरुरी है की changes original variable पर हो।

ऐसी situations में आप C++ का call by reference feature use कर सकते है। C++ आपको functions में actual variable का reference pass करने की capabilities provide करती है। ऐसा आप address-of (&) operator के द्वारा करते है।

जब आप reference के द्वारा function में parameter variables declare करते है तो ये variable भी उसी memory location को point करते है जिसे original variable point करते है। ऐसे में जब आप इन variables पर कोई change perform करते है तो original variables भी change हो जाते है।

Function को reference के द्वारा call करने के लिए आप parameter variables के पहले address of operator लगाते है। इसका उदाहरण निचे दिया जा रहा है।

void increment(int &a)
{
    a = a+1;
}

इस function को आप इस प्रकार call करेंगे।

int a =10;
increment(a);

जब आप increment function को call करते है तो a variable की value जो की यँहा पर original variable है change होकर 11 हो जाएगी। इसे निचे एक complete उदाहरण द्वारा समझाया जा रहा है।

#include <iostream>
using namespace std;

void increment(int &a);

int main()
{
    int a = 10;
    increment(a);
    cout<<"Value of a after function call is : "<<a;
}

void increment(int &a)
{
      a = a+1;
}

ऊपर दिया गया program निचे दिया गया output generate करता है।

Value of a after function call is : 11