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
