2011-03-17 17 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; 
}; 

¿Cuál es el significado de ~AirlineTicket(); en este código? No sé el significado de "~" (tilde).Significado del símbolo "~" (tilde) en C++?

Respuesta

17

Es el destructor. Se llama cuando destruye (llegando al final del alcance, o llamando al delete a un puntero a) la instancia del objeto.

+1

O cuando se produce automáticamente eliminación. – justkt

+12

Tenga en cuenta que '~' también puede indicar bitwise no en un contexto diferente. – Muggen

+0

+1 pero agregó precisión en la palabra "eliminar". – Klaim

1

~ presenta un destructor. Se usa porque (a) estaba disponible, ad (b) ~ es una (de varias) notación matemática para "no".

3

~ firma que es un destructor y cuando alguna vez el objeto sale del alcance, se llama al destructor correspondiente.

¿Cuándo se llama al destructor?

Tomando un ejemplo -

#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; 
} 

Resultados en mi sistema:

Destructor called 0xbfec7942 
Destructor called 0xbfec7943 

Este ejemplo solo sirve para indicar cuando un destructor se llama. Pero destructor está escrito solo cuando la clase maneja recursos.

¿Cuándo la clase administra los recursos?

#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; 
} 

Resultados en mi sistema:

Destructor called 0x9b68008 

Y en el programa, se publicarán No veo la necesidad de escribir destructor. Espero eso ayude !

1

~AirlineTicket(); es el destructor para la AirlineTicket clase

ver this link para mayor referencia

El destructor se invoca cuando se elimina el objeto de esa clase, para liberar cualquier memoria asignada o recursos siendo utilizado por el objeto.

4

Es el destructor de clase. Es posible que desee obtener un texto introductorio sobre el desarrollo de C++, ya que los destructores son un concepto fundamental en OOP. Hay un buen sitio de referencia here, y el C++ FAQ es otro buen recurso.

+4

Mejor aún, consulte la [Guía y lista definitiva de libros en C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –

+0

@Fred +1 gran enlace –

9

También se llama negación bit a bit (complemento), como en los siguientes contextos/ejemplos:

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

de salida: (ideone)

-101 
100 
+10

no en este contexto. – Sujoy

+0

@Sujoy: ¿qué quieres decir con eso? – Nawaz

+0

@Nawaz: Quiero decir que en la pregunta dada '~' claramente no se usa para la negación a nivel de bit. – Sujoy

Cuestiones relacionadas