Copy Constructor Objects Create करने का एक दूसरा तरीका है। इसमें हम किसी पहले से बने हुए Object की एक दूसरी Copy बना लेते हैं, जिसमें पहले वाले Object के ही मान होते हैं। हमने अभी तक कई उदाहरण देखे हैं जिनमें हमने एक Object या Variable को शुरू से Create किया है और Initialize किया है। अब हम ये मान रहे हैं कि हम जिस Class का Object Create करना चाहते हैं, उस Class का एक Object पहले से ही मौजूद है। जैसे:
Alpha alphaObject ; //Creates an Object of Class Alpha
इस Object के Data Zero या किसी उचित मान से Initialized हैं। ये एक सामान्य तरीका है जिसे हमने अभी तक Use किया है। लेकिन अब हम Objects को Create करने का एक दूसरा तरीका Use कर रहे हैं। हम ऐसे Objects भी Create कर सकते हैं, जो पहले से Created किसी Object का Copy होता है। इसे एक Basic Data Type के उदाहरण से समझने की कोशिश करते हैं। जैसे:
int beta = 21 ; //Creates an int with value 27
int gama = beta //Creates another int that is a Copy of beta
Basic Data Type के Variable की Copy करने का मतलब है कि हम एक नया Variable Create कर रहे हैं और उसे किसी पहले से Created Variable का मान प्रदान कर रहे हैं। ऐसा करना कोई जटिल काम नहीं है क्योंकि इस प्रकार के Variable में केवल एक ही मान होता है।
हम समझ सकते हैं कि उपरोक्त दोनों Statements में Equal To ( = ) Sign का प्रयोग हुआ है और ये यहां पर Assignment Operator की तरह Use नहीं हो रहा है। बल्कि यहां इन दोनों Variables को Initialize कर रहा है।
हमने Assignment व Initialization के बारे में बताया कि जब किसी Variable को Create करते ही उसमें कोई पहला मान प्रदान किया जाता है, तो इस प्रक्रिया को Initialization कहते हैं, जबकि किसी Variable में यदि पहले से कोई मान हो और उस पर कोई दूसरा मान Overwrite करके Store किया जाए, तो इस प्रक्रिया को Assignment कहते हैं।
जैसे निम्न दो Statements beta व gama को Initialize कर रहे हैं, जबकि तीसरा Statement beta में gama का मान Copy कर रहा है, क्योंकि beta में पहले से ही एक मान Stored है:
int beta = 21;
int gama = 30;
beta = gama;
एक Variable के मान को दूसरे Variable में हम निम्न तरीके से भी Copy कर सकते हैं&
int beta(gama) // Copy gama to beta
और इसी Statement को हम निम्नानुसार भी लिख सकते हैं:
int beta = gama; // Copy gama to beta
हम जिस तरह से किसी Basic Type के Variable के मान को दूसरे Variable में Copy कर सकते हैं उसी तरह से किसी Object के विभिन्न Data Members के मानों को भी किसी दूसरे Object के Data Members में Copy कर सकते हैं। जैसे
Alpha alphaObject ; // Create alphaObject of Type Alpha
alphaObject.getData(); // Put some data in alphaObject
Alpha betaObject(alphaObject) // Create betaObject by Copying alphaObject
इस Code Segment में हम सबसे पहले Alpha Class का एक alphaObject Create करते हैं और इसके Reference में getData() Member Function को Call करके इसमें विभिन्न मान Input करते हैं। उसके बाद हम तीसरे Statement से Alpha Class का एक और betaObject Create करते हैं और उसमें पहले से Created alphaObject के Data Members के विभिन्न मान Copy कर देते हैं।
यदि दूसरे शब्दों में कहें तो हम alphaObject के Data Members के विभिन्न मान betaObject के Data Members को Initialize कर देते हैं। हम ये भी कह सकते हैं कि हमने alphaObject का एक दूसरा Clone betaObject बनाया है।
जब हम किसी Object को पहली बार Create करते हैं तो उस Object की Class का Constructor Execute होता है और Create होने वाले Object को Initialize करता है। लेकिन जब हम किसी Object को दूसरे Object में Copy करते हैं, तब भी हमें एक Constructor की जरूरत होती है, जो Object को या Variable के मान को दूसरे Object या Variable में Copy करता है। लेकिन ये एक विशेष प्रकार का Constructor होता है जो केवल एक ही Argument लेता है और इस Constructor को Copy Constructor कहा जाता है।
Default Copy Constructor in C++
यदि हम किसी प्रकार का कोई Constructor नहीं बनाते हैं, तो Compiler स्वयं हमारे लिए एक Copy Constructor बनाता है। ये Copy Constructor Data Member के अनुसार एक Object के सभी Data को दूसरे Object में Copy कर देता है। इसे Member Wise Copy कहा जाता है क्योंकि ये Constructor Source Object के Data Members में बिना कोई बदलाव किए दूसरे Object के विभिन्न Corresponding Data Members में One By One Copy कर देता है। चूंकि Compiler स्वयं ये काम करता है, इसलिए इसे Default Copy Constructor कहा जाता है।
कई बार हमें हमारे स्वयं के Copy Constructor की जरूरत होती है जब हम ये चाहते हैं कि Copy होने वाले मानों में कुछ परिवर्तन हो कर Target Object में मान Copy हो। इस प्रकार की परिस्थिति में हमें स्वयं के Copy Constructors बनाने पडते हैं। लेकिन इस प्रकार के स्वयं के Copy Constructor बनाने से पहले हम ये समझेंगे कि एक Function Arguments को const कैसे बनाया जा सकता है। क्योंकि इसकी जरूरत हमारे Manual Copy Constructor में पडेगी। (Copy Constructor in C++ – Wiki)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C++ Programming Language in Hindi | Page: 666 | Format: PDF