Function Overloading in C++

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 DOWNLOAD READ ONLINE

Function Overloading in C++: “C++” मे ये एक बहुत ही अच्छा Concept Add किया गया है जिसे Function Overloading नाम दिया गया है। यानी हम एक ही नाम के Function को कई तरीकों से Use कर सकते हैं। जब हम किसी Function को Overload करना चाहते हैं, तब वास्तव में कई Function का नाम तो समान ही होता है, लेकिन उनकी Definition अलग तरह की होती है। उदाहरण के लिए मान लें कि निम्नानुसार एक Function है जो किसी Array के विभिन्न मानों का Average Calling Function को Return करता है: (Function Overloading in C++ – Wiki)

int iaverage(int array[], int size);
{
   int total = 0;                       // set total to 0
   for(int j=0; j<size; j++)            // for every array member,
	  total += array[j];                // add it to total
   return total/size;                   // return total div by array size
}

हम इस Function को किसी Program में निम्नानुसार Call कर सकते हैं:

avg = iaverage(int_array, 50);

मानलो कि अब यदि हमें long Data Type के एक Array में Stored विभिन्न मानों का Average निकालना हो तो हमें निम्नानुसार एक दूसरा Function लिखना होगा:

long laverage(long array[], int size);
{
   long total = 0;                      // set total to 0
   for(int j=0; j<size; j++)            // for every array member,
	  total += array[j];                // add it to total
   return total/size;                   // return total div by array size
}

इस Function को भी हम किसी Calling Function में निम्नानुसार Call कर सकते हैं:

avg = laverage(long_array, 50);

इसी तरह से किसी Double प्रकार के विभिन्न मानों के लिए भी एक Function daverage() हो सकता है। ये तरीका अच्छी तरह से काम करता है लेकिन ध्‍यान से देखने पर हम देख सकते हैं कि सभी Functions किन्हीं मानों का औसत Calling Function को Return करते हैं लेकिन सभी Functions का नाम अलग-अलग है। ये तरीका ठीक नहीं कहा जा सकता। इस तरीके को Use करने पर एक Programmer को विभिन्न प्रकार के नामों को याद रखना होगा।

यदि Programmer Integer प्रकार के मानों का Average निकालना चाहता है तो उसे iaverage नाम का Function Call करना होगा और यदि long प्रकार के मानों का औसत निकालना चाहता है तो उसे laverage नाम का Function Call करना होगा। ये तरीका “C” Language में अपनाया जाता था।

जैसे यदि किसी Integer का Absolute मान प्राप्त करना हो तो abs() Function Call करना पडता था और यदि long प्रकार के मान का Absolute मान प्राप्त करना होता था तो labs() Function Call करना पडता था। इस तरीके को name proliferation कहा जाता है।

“C++” में हम विभिन्न प्रकार के Data Type पर समान प्रकार के काम करने वाले Functions को समान नाम से Call किया जा सकता है। ये काम हम Function को Overload करके करते हैं। यानी हम “C++” में iaverage(), laverage() आदि समान प्रकार से Average निकालने वाले विभिन्न Functions को average() नाम से ही Call कर सकते हैं, चाहे हमें Integers का Average निकालना हो चाहे Float का।

इस तरह के Functions जिनका नाम तो एक ही हो लेकिन Function अलग-अलग तरह के Data Type पर काम करके अलग तरह का मान Return कर रहा हो, Overloaded Function कहा जाता है। उपर बता, गए दोनों Functions को हम निम्नानुसार Overload कर सकते हैं:

int average(int array[], int size);
{
	   int total = 0;                       // set total to 0
	   for(int j=0; j<size; j++)            // for every array member,
		  total += array[j];                // add it to total
	   return total/size;                   // return total div by array size
}

long average(long array[], int size);
{
   long total = 0;                      	// set total to 0
   for(int j=0; j<size; j++)            	   // for every array member,
	  total += array[j];                	// add it to total
   return total/size;                   	// return total div by array size
}

double average(double array[], int size);
{
   double total = 0;                      	// set total to 0
   for(int j=0; j<size; j++)            	   // for every array member,
	  total += array[j];                	// add it to total
   return total/size;                   	// return total div by array size
}

जब हम average नाम के Function को Call करते हैं तो Compiler Check करता है कि हमने Function में Arguments किस Data Type के दि, हैं। यदि हम Integer प्रकार का Array Function में Argument के रूप में Pass करते हैं तो Compiler उस Average Function को Call करता है, जिसमें Integer प्रकार के मानों पर Calculation होती है और Average Return होता है।

जबकि यदि हम Function में Argument के रूप में वह Array Pass करते हैं जो कि double प्रकार का है तो Compiler उस Function को Call करता है जिसमें double प्रकार के मानों का Average Calculate होता है। यानी हम एक ही नाम के Function को अलग-अलग कामों में Use कर सकते हैं। Compiler उन Data Types को Check करता है जो Argument के रूप में भेजे जाते हैं। जिस तरह का Data Type Compiler को प्राप्त होते हैं, Compiler उस Function को Call कर लेता है।

जब Compiler विभिन्न प्रकार के Overloaded Functions को देखता है, तो वह उनके Data Type के अनुसार उनका नाम Decide कर लेता है। जैसे वह Function जो कि Argument के रूप में Integer प्रकार के दो मान लेता है उसका नाम Compiler average_int_int रख देता है।

जो Function में एक long प्रकार का मान व दूसरा int प्रकार का मान लेता है उसका नाम average_long_int रख देता है। जो Function में एक double प्रकार का मान व दूसरा int प्रकार का मान लेता है उसका नाम average_double_int रख देता है।

जब Programmer किसी Long मान के Array का Average निकालना चाहता है तब वह average Function में Argument के रूप में एक Long मानों का Array Pass करता है व दूसरे Argument के रूप में Array की Size Integer के रूप में Define करता है। इससे Compiler को पहला Argument long प्रकार का व दूसरा Argument int प्रकार का प्राप्त होता है और Compiler average_long_int Function को Call कर लेता है।

चलिए, एक उदाहरण द्वारा Function की Overloading को समझने की कोशिश करते हैं। मानलो कि हम एक ऐसी Class Develop करना चाहते हैं जो कि विभिन्न Fancy तरीकों से Texts को Screen पर Display करते हैं। Object में Text Strings होती है और Member Function उन्हें Display करता है।

हम यहां Functions का एक Set Create करेंगे जो कि Texts को एक Box में Display करेगा। Box में एक Line Text के उपर होगी व एक Line text के नीचे होगी। हम यहां वास्तविक Drawing नहीं कर रहे हैं। यहां Line बनाने के लिए हम किसी भी Character जैसे कि Dash, Equal to, Asterisk आदि का प्रयोग कर सकते हैं।

Member Function box_display() के कई Versions हैं जो विभिन्न प्रकार के Box Create करने का काम करते हैं। पहला Function हमेंशा 40 Dashes की एक Line Display करेगा। दूसरा Function भी 40 Characters जितनी लम्बी एक Line बना,गा लेकिन ये Character Function में Argument के रूप में Specify किया जाएगा। तीसरे Function में Argument के रूप में Character व Line की लम्बाई दोनों को Specify किया जाएगा। Class व उसे Use करता हुआ Main Program निम्नानुसार है:

// Program
// Overloaded Functions
#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);
		}

		void box_display();           	// line of dashes
		void box_display(char);       	// line of characters
		void box_display(char, int);  	// line of n characters
};

void fancy_text::box_display()      		// line of 40 dashes
{
	cout << "----------------------------------------";
	cout << endl << text << endl;
	cout << "----------------------------------------";
}

// line of 40 characters
void fancy_text::box_display(char ch)
{
	int j;
	for(j=0; j<MAX_LENGTH; j++)
	cout << ch;
	cout << endl << text << endl;
	for(j=0; j<MAX_LENGTH; j++)
	cout << ch;
}

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

void main()
{
	fancy_text ft1;
	ft1.set_text("Text In Dashed Line");
	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();
}

main() Function में Program एक fancy_text Object Create करता है और इसमें “Text In Dashed Line” text Set करता है। इस Text को तीन अलग तरीकों से Output में दिखाने के लिए तीन Member Functions Declare किए गए हैं। तीनों का नाम समान है लेकिन तीनों अलग तरह के Arguments प्राप्त करते हैं।

पहला Function हमेंशा 40 Dashes की एक Line Print करता है। दूसरा Function उस Character की Line Print करता है जिसे Programmer Set करता है और तीसरा Function Character व उसे Print करने की Limit दोनों ही Programmer से प्राप्त करता है। ये Function निम्नानुसार Output प्रदान करता है:

Text In Dashed Line
Text In Dashed Line
Text In Dashed Line

Macros - The Preprocessor Directives
Default Arguments in C++

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 DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।