Default Arguments in C++

Default Arguments in C++: किसी Function के Default Arguments “C++” के Functions की एक और अच्छी व्‍यवस्था है। किसी Function को Overload करके एक Programmer एक ही नाम से कई समान काम करने वाले Functions को Call कर सकता है उसी तरह किसी Function में Default Arguments का प्रयोग करके एक Programmer एक ही Function को कई तरह से Use कर सकता है। “C” में जब हम किसी Function को Define करते हैं तब हम उसमें जितने Arguments Define करते हैं उस Function को Calling Function में Call करते समय उतने Arguments उस Function में Pass करने जरूरी होते हैं।

जबकि यदि हम Default Arguments का प्रयोग करते हैं, तो यदि हम चाहें तो कुछ Arguments को छोड भी सकते हैं। Compiler उन छोडे हुए मानों के स्थान पर Default Arguments को Use कर लेता है। इसे समझने के लिए हम एक उदाहरण लेते हैं।

मानलो कि हम एक ऐसा Function लिखते हैं जो Calling Program से दो Arguments लेता है और Arguments के मान का Power Return करता है। यानी पहला Argument वह संख्‍या होती है जिसको उसी से गुणा करना है और दूसरा Argument वह मान होता है जो बताता है कि पहले Argument को उसी से कितनी बार गुणा करना है।

जैसे मान लो कि पहला Argument 3.0 है व दूसरा Argument 4 है तो ये दोनों Arguments Use करके Function Calling Program को 81 ( 3 X 3 X 3 X 3 ) Return करता है। हम इस Function को Calling Program में निम्नानुसार Call कर सकते हैं:

answer = power (3.0, 3);

इस Function का Definition निम्नानुसार है:

#include <math.h>
float power(float fpn, int pow)
{
   float product = 1.0;
   for(int j=0; j<pow; j++)   // multiply fpn by itself pow times
	  product = product * fpn;
   return product;
}

ये Function अच्छी तरीके से काम करता है। लेकिन मान लो कि इसी Function को हम दूसरे तरीके से Use करना चाहें यानी यदि हम Function को निम्नानुसार Call करें जहां हम दूसरा Argument Pass नहीं कर रहे हैं। तो हमें प्रथम Argument में दि, जाने वाले मान के बराबर उसी संख्‍या का गुणनफल प्राप्त होना चाहिए। यानी यदि हम इस Function को निम्नानुसार Call करें:

answer = power(9.0);          // should square the number

तो हमें 9.0 X 9.0 यानी Output में 81.0 प्राप्त होना चाहिए। इस प्रकार का परिणाम प्राप्त करने के लिए हम power() Function को Overload कर सकते हैं। इस स्थिति में हमारे पास power नाम के दो Function हो जाएंगे। पहला जो दो Argument लेता है और दूसरा जो कि केवल एक ही Argument लेता है।

लेकिन यहां इस काम को करने का एक दूसरा तरीका भी है। इस तरीके को हम Default Argument कहते हैं। यानी जब हम किसी Function को Call करते हैं तब यदि हम चाहें तो Function में Pass किए जाने वाले विभिन्न Arguments में से कुछ Arguments को छोड सकते हैं।

जब Compiler Function के Arguments को Check करता है और उसे कोई Argument प्राप्त नहीं होता तो Compiler उस Argument के स्थान पर Argument के Default मान को Use कर लेता है। चलिए, इस Concept को हम power() Function में Use करते हैं।

float power(float, int=2);         	// function declaration
…                                  	// (supplies default argument)

void main()
{
   …
   answer = power(9.0);            	// call with one argument								   	// (2.0 is supplied as 2nd arg)
   …
   answer = power(2.0, 3);         	// call with two arguments
}

float power(float fpn, int pow)    	// function definition
{                               	// (doesn't know about defaults)
   float product = 1.0;
   for(int j=0; j<pow; j++)
	  product *= fpn;
   return product;
}

इस Program Segment में Function Declaration में Default Arguments को Use किया गया है। Function में int = 2 Statement बताता है कि यदि इस Argument के स्थान पर Calling Function से कोई मान नहीं आता है तो इस Argument का Default मान 2 होगा जिसे Function Use कर लेगा। हालांकि इस प्रकार से Function Declaration को Use करने पर भी Function की Definition को Change करने की जरूरत नहीं होती है।

main() Function में power Function को दोनों तरीकों से Call किया गया है। पहले Call में Function में केवल एक Argument दिया गया है जबकि दूसरे Call में दोनों Arguments प्रदान किए गए हैं।

चलिए, अब हम fancy_text Class को Modify करते हैं और Function Overloading करने के बजाय Default Arguments का प्रयोग करके वही काम करते हैं जो Function Overloading द्वारा किया गया था। Modified Program व Class निम्नानुसार है:

// Program
#include <iostream.h>
#include <string.h>                    	// for strcpy()
#include <conio.h>

const int MAX_LENGTH = 40;             	// maximum length of text

class fancy_text                       		// class displays text
{
	private:
		char text[MAX_LENGTH];           // text to be displayed

	public:
		void set_text(char tx[])         // set the text
		{
			strcpy(text, tx);
		}
						// set default values
	void box_display(char ch='-', int n = MAX_LENGTH);
};

// line of n characters ch, or default values for n and/or ch
void fancy_text::box_display(char ch, int n)
{
	int j;
	for(j=0; j<n; j++)                  	// line of n ch's
	cout << ch;
	cout << endl << text << endl;       	// line of text
	for(j=0; j<n; j++)                  	// line of n ch's
	cout << ch;
}

void main()
{
	fancy_text ft1;
	ft1.set_text("Text with Box Bounded");

	ft1.box_display();         		// display text with default lines
	cout << endl << endl;

	ft1.box_display('=');      		// default length and equal signs
	cout << endl << endl;
	ft1.box_display('=', 18);  		// equal signs; length matches text
	cout << endl << endl;
	getch();
}

इस Program में हम box_display() Function को तीन तरीके से Call कर सकते हैं। इस Function के दोनों Arguments को छोडा जा सकता है, दूसरे Argument को छोडा जा सकता है और दोनों Arguments को Pass किया जा सकता है। हर Function एक Characters की Line Display करता है, Text की एक Line Display करता है और अन्‍य Character की एक Line Display कर सकता है।

ft1.box_display();                            // two lines of 40 dashes
ft1.box_display(‘=’);                       // two lines of 40 ‘=’ characters
ft1.box_display(‘=’, 18);                // two lines of 18 ‘=’ characters

इस Program का Output भी पिछले Program की तरह निम्नानुसार ही प्राप्त होता है:

Text with Box Bounded
—————————————-
Text with Box Bounded
========================================
Text with Box Bounded
==================

हम देख सकते हैं कि हमने Main() Function में किसी तरह का कोई परिवर्तन नहीं किया है। हमने केवल Class के Member Function में परिवर्तन किया है और उसे Overloaded Function से Default Argument वाले Function में Modify किया है।

 

The cin.getline() Function

“C++” की Library में भी ऐसे कई Functions हैं जो Default Arguments का प्रयोग करते हैं। उन्ही में से एक Function cin.getline() भी है। हमने पहले भी cin.get() Function को Use करके Keyboard से Text Read किए हैं। cin.getline() Function उसी के समान है, लेकिन इस Function में Characters की Line को Terminate करने के लिए एक Termination Character का प्रयोग Default Arguments के रूप में किया गया है।

Programmer जिस Character का प्रयोग करके किसी Line को Terminate करना चाहता है, वह Character इस Function में Argument के रूप में देता है। हम इस Function को उसी तरह से Call कर सकते हैं जिस तरह से cin.get() Function को Call करते हैं। यानी

cin.getline(str, 80);

ये Statement Keyboard से 80 Characters तक Read कर सकता है और उसे str नाम के Array प्रकार के Variable में Store कर सकता है। जब हम इस Function को इस तरीके से Use करते हैं तब Function तब Terminate होता है जब User Enter Key Press करता है। फिर भी, इस Function में हम निम्नानुसार एक तीसरा Argument और Add कर सकते हैं:

cin.getline(str, 80, ‘$’);             // get up to 80 chars, place in str

जब हम इस तरह से Function को Call करते हैं तब String तब तक Terminate नहीं होती जब तक कि User $ (Dollar sign) Key को Press नहीं करता। getline() Function का Declaration iostream.h नाम की Header File में किया गया है। इसे निम्नानुसार Declare किया गया है:

istream getline(char, int, char = ‘\n’);      // simplified declaration

तीसरे Argument में एक Default मान ‘\n’ दिया गया है जो कि New Line Character है।

 

The Limitations of Default Arguments in C++

Default Arguments को Define करने के सम्बंध में कुछ Limitations भी हैं। जब हम किसी भी Function में Default Arguments Define कर रहे होते हैं तो हम उस Function के केवल आखिरी Argument को ही Default मान प्रदान कर सकते हैं। यदि हम दो Arguments को Default मान प्रदान कर रहे होते हैं तो वे दोनों Argument Function के आखिरी दो Argument होने चाहिए।

हम कभी भी किसी Function के किसी बीच के Argument को Default मान प्रदान नहीं कर सकते हैं। यदि हम ऐसा करते हैं तो Compiler को ये पता नहीं चलेगा कि हमने किस Argument के लिए उसे Call करते समय मान प्रदान किया है। यानी हम निम्नानुसार नहीं कर सकते हैं:

void badfunction(int, float=2.0, int);                // no good

हम ऐसा इसलिए नहीं कर सकते हैं क्योंकि यहां पर Default Argument Function के Argument List का अन्तिम Argument नहीं है। हालांकि यदि हम निम्नानुसार करते हैं तो ये एक Valid Default Arguments का Function होगा क्योंकि इस Function के अन्तिम दो Arguments को Default मान प्रदान किया गया हैं:

void okfunction(int, int=2, int=20);                   // good

यदि हम okfunction() जैसे किसी Function को Call करते हैं और उसे केवल दो मान ही प्रदान करते हैं तो दोनों मान प्रथम व द्वितीय Arguments को प्राप्त होंगे। जिस Argument को मान प्राप्त नहीं होगा वह तीसरा Argument होगा। हम किसी Argument के Default मान को Program के बीच में कहीं पर Additional Declarations करके Change नहीं कर सकते हैं। यदि हम ऐसा करने की कोशिश करते हैं, तो Compiler Error देता है।

अभी तक हमने दो तरीके बता, हैं जिनमें एक ही नाम के Function को एक से अधिक तरीकों से Use किया जा सकता है। Overloaded Functions वास्तव में Separate Function होते हैं जिनमें अलग-अलग संख्‍या व प्रकार के Arguments हो सकते हैं, लेकिन सभी Functions का नाम समान होता है। जबकि एक Function जिसमें Default Arguments का प्रयोग किया गया है, एक ही Single Function होता है लेकिन हम इसमें Different संख्‍या में Arguments Pass कर सकते हैं।

Overloaded Functions तब Create किए जाते हैं जब एक ही प्रकार के Operations विभिन्न प्रकार के Data Type के Data पर किए जा रहे होते हैं। Default Arguments का प्रयोग करके हम किसी Function को अपनी आवश्‍यकतानुसार Flexible बनाते हैं। (Default Arguments in C++ – Wiki)

CPP Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C++ Programming Language in Hindi | Page: 666 | Format: PDF

BUY NOW GET DEMO REVIEWS