Programación D - Constructor y destructor

El constructor de clases

Una clase constructor es una función miembro especial de una clase que se ejecuta cada vez que creamos nuevos objetos de esa clase.

Un constructor tiene exactamente el mismo nombre que la clase y no tiene ningún tipo de retorno, ni siquiera vacío. Los constructores pueden ser muy útiles para establecer valores iniciales para ciertas variables miembro.

El siguiente ejemplo explica el concepto de constructor:

import std.stdio;

class Line { 
   public: 
      void setLength( double len ) {
         length = len; 
      }
      double getLength() { 
         return length; 
      }
      this() { 
         writeln("Object is being created"); 
      }

   private: 
      double length; 
} 
 
void main( ) { 
   Line line = new Line(); 
   
   // set line length 
   line.setLength(6.0); 
   writeln("Length of line : " , line.getLength()); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Object is being created 
Length of line : 6

Constructor parametrizado

Un constructor predeterminado no tiene ningún parámetro, pero si lo necesita, un constructor puede tener parámetros. Esto le ayuda a asignar un valor inicial a un objeto en el momento de su creación, como se muestra en el siguiente ejemplo:

Ejemplo

import std.stdio;

class Line { 
   public: 
      void setLength( double len ) { 
         length = len; 
      }
      double getLength() { 
         return length; 
      }
      this( double len) { 
         writeln("Object is being created, length = " , len ); 
         length = len; 
      } 

   private: 
      double length; 
} 
 
// Main function for the program 
void main( ) { 
   Line line = new Line(10.0);
   
   // get initially set length. 
   writeln("Length of line : ",line.getLength()); 
    
   // set line length again 
   line.setLength(6.0); 
   writeln("Length of line : ", line.getLength()); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Object is being created, length = 10 
Length of line : 10 
Length of line : 6

El destructor de clases

UNA destructor es una función miembro especial de una clase que se ejecuta siempre que un objeto de su clase sale del alcance o siempre que la expresión de eliminación se aplica a un puntero al objeto de esa clase.

Un destructor tiene exactamente el mismo nombre que la clase prefijada con una tilde (~). No puede devolver un valor ni tomar ningún parámetro. Destructor puede ser muy útil para liberar recursos antes de salir del programa, como cerrar archivos, liberar recuerdos, etc.

El siguiente ejemplo explica el concepto de destructor:

import std.stdio;

class Line { 
   public: 
      this() { 
         writeln("Object is being created"); 
      }

      ~this() { 
         writeln("Object is being deleted"); 
      } 

      void setLength( double len ) { 
         length = len; 
      } 

      double getLength() { 
         return length; 
      }
  
   private: 
      double length; 
}
  
// Main function for the program 
void main( ) { 
   Line line = new Line(); 
   
   // set line length 
   line.setLength(6.0); 
   writeln("Length of line : ", line.getLength()); 
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Object is being created 
Length of line : 6 
Object is being deleted