2011-03-17 33 views
9
// AirlineTicket.h 

#include <string> 
class AirlineTicket 
{ 
public: 
    AirlineTicket(); 

    ~AirlineTicket(); 

    int   calculatePriceInDollars(); 
    std::string getPassengerName(); 
    void   setPassengerName(std::string inName); 
    int   getNumberOfMiles(); 
    void   setNumberOfMiles(int inMiles); 
    bool   getHasEliteSuperRewardsStatus(); 
    void   setHasEliteSuperRewardsStatus(bool inStatus); 

private: 
    std::string mPassengerName; 
    int   mNumberOfMiles; 
    bool   fHasEliteSuperRewardsStatus; 
}; 

अब मुझे इस कोड में ~AirlineTicket(); का अर्थ क्या है? मुझे "~" (tilde) का अर्थ नहीं पता है।सी ++ में "~" (tilde) प्रतीक का अर्थ?

उत्तर

17

यह विनाशक है। ऑब्जेक्ट का उदाहरण जब आप नष्ट करते हैं (स्कोप के अंत तक पहुंचते हैं, या delete को पॉइंटर पर कॉल करते हैं) कहा जाता है।

+1

या जब विलोपन हो जाती हैं। – justkt

+12

ध्यान दें कि '~' एक अलग संदर्भ में बिटवाई को भी इंगित नहीं कर सकता है। – Muggen

+0

+1 लेकिन "हटाएं" शब्द पर सटीकता जोड़ा गया। – Klaim

1

~ एक विनाशक का परिचय देता है। इसका उपयोग किया जाता है क्योंकि (ए) यह उपलब्ध था, विज्ञापन (बी) ~ "नहीं" के लिए गणितीय नोटेशन में से एक (कई) है।

3

~ संकेत करता है कि यह एक विनाशक है और जब कभी वस्तु गुंजाइश से बाहर हो जाती है, तो इसी विनाशक को बुलाया जाता है।

जब विनाशक कहा जाता है?

एक उदाहरण ले रहा है -

#include <iostream> 
class foo 
{ 
    public: 
    void checkDestructorCall() ; 
    ~foo(); 
}; 

void foo::checkDestructorCall() 
{ 
    foo objOne; // objOne goes out of scope because of being a locally created object upon return of checkDestructorCall 
} 

foo:: ~foo() 
{ 
    std::cout << "Destructor called \t" << this << "\n"; 
} 

int main() 
{ 
    foo obj; // obj goes of scope upon return of main 
    obj.checkDestructorCall(); 
    return 0; 
} 

अपने सिस्टम पर परिणाम:

Destructor called 0xbfec7942 
Destructor called 0xbfec7943 

यह उदाहरण केवल जब एक नाशक कहा जाता है इंगित करने के लिए कार्य करता है। लेकिन विनाशक केवल तभी लिखा जाता है जब वर्ग संसाधनों का प्रबंधन करता है।

जब कक्षा संसाधनों का प्रबंधन करती है?

#include <iostream> 
class foo 
{ 

    int *ptr; 

    public: 
    foo() ; // Constructor 
    ~foo() ; 

}; 

foo:: foo() 
{ 
    ptr = new int ; // ptr is managing resources. 
        // This assignment can be modified to take place in initializer lists too. 
} 

foo:: ~foo() 
{ 
    std::cout << "Destructor called \t" << this << "\n"; 
    delete ptr ; // Returning back the resources acquired from the free store. 
       // If this isn't done, program gives memory leaks. 
} 

int main() 
{ 
    foo *obj = new foo; 
    // obj is pointing to resources acquired from free store. Or the object it is pointing to lies on heap. So, we need to explicitly call delete on the pointer object. 

    delete obj ; // Calls the ~foo 
    return 0; 
} 

अपने सिस्टम पर परिणाम:

Destructor called 0x9b68008 

और कार्यक्रम में आपने पोस्ट मैं नाशक लिखने के लिए एक की जरूरत नहीं दिख रहा। आशा करता हूँ की ये काम करेगा !

1

~AirlineTicket(); जब आप किसी भी स्मृति आवंटित या संसाधनों को मुक्त करने के उस वर्ग की वस्तु को नष्ट

नाशक कहा जाता है आगे के संदर्भ के लिए वर्ग AirlineTicket के लिए नाशक

this link देखना है वस्तु द्वारा इस्तेमाल किया जा रहा है।

4

यह वर्ग विनाशक है। आप सी ++ विकास पर एक प्रारंभिक पाठ चुनना चाहते हैं, क्योंकि विनाशक ओओपी में एक मौलिक अवधारणा हैं। एक अच्छी संदर्भ साइट here है, और C++ FAQ एक और अच्छा संसाधन है।

+4

बेहतर अभी तक, [परिभाषित सी ++ पुस्तक गाइड और सूची] देखें (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)। –

+0

@Fred +1 महान लिंक –

9

यह भी बिटवाइज़ निषेध (पूरक) कहा जाता है, निम्नलिखित संदर्भों/उदाहरण में के रूप में:

int a = ~100; 
int b = ~a; 

आउटपुट: (ideone)

-101 
100 
+10

इस संदर्भ में नहीं। – Sujoy

+0

@ सुजॉय: इसका मतलब क्या है? – Nawaz

+0

@ नवाज: मेरा मतलब है कि दिए गए प्रश्न में '~' स्पष्ट रूप से बिटवाईयर अस्वीकृति के लिए उपयोग नहीं किया जाता है। – Sujoy

संबंधित मुद्दे