Initializer List – C++ Initialization List

Initializer List: पिछले उदाहरण में Constructor कुछ भी विशेष उपयोगी काम नहीं कर रहा है। इसलिए एक और उदाहरण देखते हैं, जिसमें Contractors कुछ उपयोगी काम कर रहा है।

हमने पिछले अध्‍याय में एक Stack Program का उदाहरण देखा था। जिसमें init() Member Function को Call करके Stack को Initialize किया गया था। इसी उदाहरण को हम वापस देखते हैं, लेकिन चूंकि हम जानते हैं कि Constructor एक ऐसा Function होता है, जो Object के Create होते ही Execute हो जाता है, इसलिए हम Contractors का प्रयोग Stack को Initialize करने के लिए कर सकते हैं। यानी जैसे ही Stack का कोई Object Create होता है, वह Initialize भी हो जाता है। उदाहरण निम्नानुसार है:

// Program
//Stack Class Implementation
#include <iostream.h>
#include <conio.h>

class Stack    // a stack holds up to 20 ints
{
	private:
		int st[20];             // integers are stored in array
		int top;                // index of last item pushed

	public:
		Stack() : top(-1)       // constructor
		{
		}

		void push(int var)      // place an item on the stack
		{
			st[++top] = var;
		}

		int pop()               // remove an item from the stack
		{
			return st[top--];
		}
};

//Stack Program Implementation
void main()
{
	Stack s1;          // Create a stack object (no need to initialize it)
	s1.push(101);      // push 3 items onto stack
	s1.push(120);
	s1.push(213);

	cout << s1.pop() << endl;  	// pop 3 items and display them
	cout << s1.pop() << endl;
	cout << s1.pop() << endl;
	getch();
}

इस उदाहरण में हम देख सकते हैं कि हमने Stack Class के Object को Initialize करने के लिए init() Function को Create नहीं किया है। बल्कि ये काम Constructor कर रहा है। ये Constructor Stack Class के Object के Creation के समय ही Object के top Data Member को -1 Initialize कर देता है। यदि हम निम्नानुसार इस Variable को Initialize करें:

Stack()
{
    Top = -1;
}

तो हालांकि यहां काम वही हो रहा है जो उदाहरण का Constructor कर रहा है, लेकिन इस तरीके से हम सभी प्रकार के Objects को Initialize नहीं कर सकते हैं। जैसे मानलो कि हमारी Class में हमने किसी अन्‍य Class के Object को Use किया है। अब इस अन्‍य Class के Object को एक Constructor द्वारा Initialize करना होता है ना कि किसी init() Member Function द्वारा। और हम इस दूसरी Class के Object को Initialize करने के लिए init() Function को Call करना नहीं चाहते हैं। हम चाहते हैं, कि ये अन्‍य Class का Object भी सामान्‍य तरीके से ही Initialize हो।

इस काम को करने के लिए “C++” में एक अन्‍य Syntax है जिससे हम किसी Object को Initialize कर सकते हैं। यदि हम इस तरीके से Stack Class के Constructor को लिखना चाहें, तो Stack Class का ये Constructor निम्नानुसार लिखना होगा:

Stack() : top (-1) { }

यानी हमें Class के जिस Data Member Variable को Initialize करना होता है, सबसे पहले उस Class का नाम लिखा जाता है। फिर Class के नाम के बाद Colon लगाया जाता है और उस Data Variable का नाम लिखा जाता है, जिसे Initialize करना है और Initialize किए जाने वाले Variable के अन्त में एक कोष्‍ठक बना कर उसमें वह मान लिखा जाता है, जो Object के Data Member को Initialize करता है।

इस प्रकार के Initialization में हम देख सकते हैं कि हमने इस Member Function की Body को Empty रखा है। ऐसा इसलिए किया गया है, क्योंकि Object के जिस Data Member ( top ) को Initialize करना था] उसे पहले ही Initialize किया जा चुका है।

हमें यदि एक से अधिक Data Members को Initialize करना हो, तो हम Comma Separator का प्रयोग करके ये काम कर सकते हैं। इसे समझने के लिए निम्न उदाहरण देखिए:

// Program
#include<iostream.h>
class integer
{
	int m;
	int n;

	public:
		integer() : n(0), m(0) { }

		void display(void)
		{
			cout<<"\n m is "<<m;
			cout<<"\n n is "<<n;
		}
};

void main()
{
	integer first, second;

	cout<<"\n Object First: ";
	first.display();

	cout<<"\n Object Second: ";
	second.display();
}

// Output
  Object First:
    m is 0
    n is 0

  Object Second:
    m is 0
    n is 0

इसमें हमने Constructor Integer के Declaration के बाद Colon का प्रयोग करके Data Members m व n को Initial मान प्रदान किया है और Constructor की Body { } को Empty रखा है। हम जितने चाहें उतने Data Members को इसी प्रकार से Comma द्वारा अलग करके मान Initialize कर सकते हैं। इस प्रकार के Initialization को Initialization list कहा जाता है।

इसमें Initialize किए जाने वाले मान को Data Member के नाम के बाद Parentheses में लिखा जाता है। Function की Body में हम कई अन्‍य प्रकार के Statements लिख सकते हैं। एक बात ध्‍यान रखें कि कुछ Variables जैसे कि Arrays को Initialization List के रूप में Initialize नहीं किया जा सकता है।

ऐसा Constructor जो किसी प्रकार का कोई Argument नहीं लेता है, Default Constructor कहलाता है। हमने यहां जो उदाहरण दिया है, वह Default Construction का उदाहरण है, क्योंकि इसमें किसी प्रकार का कोई Argument Pass नहीं किया गया है। यहां हम Integer Class के जितने भी Objects Declare करेंगे, उन सभी में m व n का मान 0 Initialize हो जाएगा।

लेकिन यदि हम ये चाहें कि Declare किए जाने वाले हर Object के Data Member को उनके Declaration के समय मान Initialize किया जा सके, ठीक उस तरह से जिस तरह से हम किसी Basic प्रकार के Variable को Declare करते ही उसे मान Initialize करते हैं, तो हमें Constructor Function में Arguments को Use करना पडता है। (Initializer List – C++ Initialization List – CPPReference)

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