new and delete Operator in C++: Objects व विभिन्न प्रकार के Basic Variables को भी new Operator के प्रयोग द्वारा Create किया जा सकता है। हमने अभी तक कई उदाहरण देखे हैं जिनमें Object को Compiler ही Define करता है और Compiler ही Memory Allocate करता है। जैसे:
Employee employee1; // Definition
इस Statement से एक Object Define होता है। लेकिन कई बार हमें ये पता नहीं होता है कि हमे हमारे Program में किसी समय कितने Objects की जरूरत है। जब ये स्थिति होती है तब हम new Operator के प्रयोग द्वारा Program के Run Time में Dynamically Objects Create कर सकते हैं। जैसाकि हमने देखा है कि new Operator एक ऐसी Reserved Memory Block का Address Return करता है जिसका कोई नाम नहीं होता है। new Operator द्वारा Object Create व Use करने का तरीका निम्न उदाहरण से समझा जा सकता है:
// Accessing Member Functions by Pointer #include <iostream.h> #include <conio.h> class English // English class { private: int feet; float inches; public: void getdist() // get distance from user { cout << “\nEnter feet: "; cin >> feet; cout << “Enter inches: "; cin >> inches; } void showdist() // display distance { cout << feet << “\'-” << inches << '\“'; } }; void main() { English* distPtr; // pointer to English distPtr = new English; // points to new English object distPtr->getdist(); // access object members distPtr->showdist(); // with -> operator delete distPtr; // delete object from memory }
ये Program English प्रकार का एक Pointer Object distPtr Create करता है। फिर new Operator का प्रयोग करके एक English के आकार के बराबर Size का Memory Block Reserve करता है और उस Reserved Memory Block का Pointer distPtr को Assign करता है। फिर Program इस Class के Member Functions को Access करने के लिए Arrow Operator का प्रयोग करता है और इस Program का Output निम्नानुसार प्राप्त होता है:
Enter feet: 6
Enter inches: 4.75
6′-4.75”
ध्यान दें कि जैसे ही Program Terminate होता है, Destructor new Operator द्वारा Created English Object को Explicitly Delete कर देता है। जब Objects के एक Group के Pointers को किसी Array में Store करके उस Group के सभी Objects को Handle करना होता है तब हम “Array of Pointers to Objects Create” करते हैं। इस तरीके से इन Group Objects को Access करनाए हर Object को Array में Store करके Access करने की तुलना में काफी सरल होता है। निम्न उदाहरण देखिए:
// Array of Pointers to Objects #include <iostream.h> #include <conio.h> class person // class of persons { protected: char name[40]; // person's name public: void setName(void) // set the name { cout << “Enter name: "; cin >> name; } void printName(void) // get the name { cout << “\n Name is: ” << name; } }; void main(void) { person* persPtr[100]; // array of pointers to persons int n = 0; // number of persons in array char choice; do // put persons in array { persPtr[n] = new person; // make new object persPtr[n]->setName(); // set person's name n++; // count new person cout << “Enter another (y/n)? "; // enter another person? cin >> choice; } while( choice=='y' ); // quit on 'n' for(int j=0; j<n; j++) // print names of { // all persons cout << “\nPerson number ” << (j+1); persPtr[j]->printName(); } while(n) // delete all persons delete persPtr[--n]; // from memory getch(); }
यहां person Class में केवल एक ही Data Item name है, जिसमें एक नाम को Represent करते हुए String को Store किया जाता है। इसके दो Member Functions हैं, जो User से नाम Accept करते हैं और उन्हें Screen पर Display करते हैं। Program के अन्त में हमने Pointer Array में Stored विभिन्न Objects Pointers को Delete करने के लिए एक while Loop का प्रयोग किया है।
Main() Function में हमने persPtr नाम का person Class का एक Pointer Array Create किया है, जिसकी Size 100 है। फिर एक Loop में हमने new Operator का प्रयोग करके person Object Create किया है। फिर User को नाम Enter करने के लिए Prompt किया जाता है। जब User नाम Input करता है तब उस नाम को एक नए person Object में Store किया जाता है। फिर उस person Object के Pointer को persPtr Array में Store किया है। इस Program का User से निम्नानुसार Interaction होता है।
// Output Enter name: Madhav Enter another (y/n)? y Enter name: Gopal Enter another (y/n)? y Enter name: NandLal Enter another (y/n)? y Enter name: BalGopal Enter another (y/n)? y Enter name: Krishna Enter another (y/n)? y Enter name: Kanhaiya Enter another (y/n)? y Enter name: ManMoham Enter another (y/n)? n Person number 1 Name is: Madhav Person number 2 Name is: Gopal Person number 3 Name is: NandLal Person number 4 Name is: BalGopal Person number 5 Name is: Krishna Person number 6 Name is: Kanhaiya Person number 7 Name is: ManMoham
persPtr Array में जिन Objects के Addresses हैं, उन Objects के Reference में हमें printName() व setName() Member Functions को Call करने की जरूरत पडती है। persPtr Array के हर Element को Array Notation persPtr[j] द्वारा या इसके Equivalent Pointer Notation *(persPtr + j ) Specify किया जा सकता है। Array के Elements person प्रकार के Objects के Pointers यानी “Pointer to Objects” हैं।
इसलिए जैसाकि हमने पहले भी कहा कि एक Pointer Object के Member Function को Access करने के लिए हमें Array Operator (->) का प्रयोग करना पडता है और हमने इस Program में भी यही किया है। किसी person का नाम Accept करने के लिए हम getName() Member Function को निम्नानुसार Call करते हैं:
persPtr[j]->setName();
ये Statement setName() Member Function को उस Object के Reference में Call कर लेता है जिसे persPtr Array में Element j द्वारा Point या Refer किया गया होता है। (new and delete Operator in C++)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C++ Programming Language in Hindi | Page: 666 | Format: PDF