[C con Clase] duda con constructores

Davidson, Steven srd4121 en njit.edu
Vie Dic 21 22:32:28 CET 2012


Hola Francisco,

2012/12/21 fanatidark <pandoras_box_789 en hotmail.com>:
> mi duda es como se declaran los constructuoros y para que me sirven , ya leí el curso pero no le entiendo my bien alguien me puede decir bien y si pueden poner un ejemplo se los agradecería mucho gracias

Un constructor no es más que una función miembro, aunque especial.
Esta función DEBE denominarse exactamente igual que el nombre de su
clase (o 'struct'). No se indica valor de retorno, porque
implícitamente retornará un objeto de esta clase. Por ejemplo,

struct persona
{
  char szNombre[256];

  persona( const char *pszNombre );
};

persona :: persona( const char *pszNombre )
{
  if( pszNombre )
    strcpy( szNombre, pszNombre );
  else
    szNombre[0] = '\0';  // cadena nula
}

Usamos constructores porque son funciones invocadas automáticamente
mientras se instancia - se define - un objeto. Esto nos ofrece la
posibilidad de realizar ciertas tareas en preparación de la creación
del objeto. Típicamente, usaríamos el constructor para inicializar los
datos miembro con valores conocidos y válidos. Sin embargo, otras
clases quizá requieran una construcción más compleja. Por ejemplo,
quizás una clase que represente a una bitácora necesite abrir ficheros
específicos y posiblemente escribir algo en ellos. Esto podría ser,

class bitacora
{
private:
  fstream fs;

public:
  bitacora();
  bitacora( const char *pszFichero );
};

bitacora :: bitacora()
{
  fs.open( "temp.txt" );
}

bitacora :: bitacora( const char *pszFichero )
{
  fs.open( pszFichero );
}

Otras clases quizá requieran que cada objeto se conecte a algún
servidor remotamente usando funciones de redes (internet). Cada clase
puede tener diferentes requisitos y por eso nos interesa que el
constructor prepare el objeto automática e internamente. Recuerda que
siempre nos interesa el encapsulamiento, por lo que las funciones
miembros, como es el constructor, son quienes deben manipular los
datos miembro directa e internamente.


Espero haber aclarado la duda.

Steven




Más información sobre la lista de distribución Cconclase