jueves, 28 de febrero de 2019

Constructores y Destructores en C++

CONSTRUCTORES  Y  DESTRUCTORES EN C++

CONSTRUCTORES
Constructor en C++. Los constructores tienen el mismo nombre que la clase, no retornan ningún valor y no pueden ser heredados. Además deben ser públicos, no tendría ningún sentido declarar un constructor como privado, ya que siempre se usan desde el exterior de la clase, ni tampoco como protegido, ya que no puede ser heredado.

Ejemplo de constructor en una clase llamada pareja

 #include <iostream.h>
 class pareja
 {
   public:
    //Constructor
    pareja(int a2, int b2);
    //Funciones miembros de la clase "pareja"
    void Lee(int &a2, int &b2);
    void Guardar(int a2, int b2);
   private:
    //Datos miembros de la clase "pareja"
    int a, b;
 }
 pareja::pareja(int a2, int b2)
 {
    a = a2;
    b = b2;
 }
 void pareja::Lee(int &a2, int &b2)
 {
    a2 = a;
    b2 = b;
 }
 void pareja::Guarda(int a2, int b2)
 {
    a = a2;
    b = b2;
 }
 int main(int argc, char *argv[])
 {
    pareja par1(12, 32);
    int x, y;
    par1.Lee(x, y);
    cout << "Valor de par1.a: " << x <<endl;
    cout << "Valor de par2.b: " << x <<endl;
    return 0;
 }

Sobrecarga de constructores

También pueden definirse varios constructores para cada clase, es decir, la función constructor puede sobrecargarse. La única limitación es que no pueden declararse varios constructores con el mismo número y el mismo tipo de argumentos.

Constructor copia

Un constructor de este tipo crea un objeto a partir de otro objeto existente. Estos constructores sólo tienen un argumento, que es una referencia a un objeto de su misma clase.

DESTRUCTOR

Un destructor en programación orientada a objetos es una función miembro especial llamadas automáticamente en la ejecución del programa, y por tanto no tienen por qué ser llamadas explícitamente por el programador. Sus principales cometidos son:
  • liberar los recursos computacionales que el objeto de dicha clase haya adquirido en su tiempo de ejecución al expirar éste.
  • quitar los vínculos que pudiesen tener otros recursos u objetos con éste.
Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del ámbito en el que está declarado el objeto.
Ejemplo
C++

El destructor se nombra con el mismo nombre de la clase precedido de un símbolo de Media:tilde (~). Si la instancia de la clase se creó como una variable automática, el destructor será llamado automáticamente cuando el programa salga fuera del ámbito donde fue creada dicha instancia.

Ejemplo

#include <iostream>
#include <string>
 
class foo
{
 public:
 
 foo( void )
 { 
  print( "foo()" );
 } 
 
 ~foo( void )
 { 
  print( "~foo()" );
 }
 
 void print( std::string const& text ) 
 {
  std::cout << static_cast< void* >( this ) << " : " << text << std::endl;
 }
 
/* 
 Deshabilitado el contructor de copia y el operador de asignación al hacerlos privados
*/ 
 private:
 
 foo( foo const& );
 
 foo& operator = ( foo const& );
};
 
int main( void )
{
 foo array[ 3 ];
/* 
 Cuanto la 'main' termina, el destructor es invocado para cada elemento de 'array'.
 La primera instancia creada es la última en ser destruída.
*/
}
El constructor de copia y el operador de asignación, deben ser deshabilitados en clases donde no se necesitan explícitamente. (Scott Meyers, Effective C++, Item 6: Explicitly disallow the use of compiler-generated functions you do not want.
Otros usos habituales de los destructores son terminar conexiones con bases de datos y liberar recursos de red.

No hay comentarios.:

Publicar un comentario

Conexión de Base de Datos y Visual Basic 2010

Para poder conectarnos a nuestra base de datos MySQL, ya sea local o de manera remota hay una forma muy sencilla de hacerlo. REQUISITOS ...