[C con Clase] Llamar al constructor sin argumentos de una clase en la implementación.

Salvador Pozo salvador en conclase.net
Mar Jun 5 20:18:29 CEST 2012


El pasado 2012-05-20 13:06:22, Sergio escribió:
 
S> Hola a todo el mundo.
S> Tengo una duda, y es que no se como se puede llamar al constructor sin argumentos de una clase pero en la implementación, es decir, si yo tengo lo siguiente:

Hola:

No se puede invocar a un destructor de ninguna forma, en ese sentido, los constructores y destructores no comportan como el resto de los métodos.

Lo que sí puedes hacer es crear un método con el código del constructor sin argumentos, llamándolo (por ejemplo), iniciar. Más tarde puedes llamar a ese método desde el constructor que quieras.

----8<------
strcut Nodo
{
  int* data;
  Nodo* sig;
};

class Lista{
  Nodo* t;
  int tam_array_data;
  int n_els;
  void Iniciar() {
    Nodo = NULL;
    n_els = 0;
  }
  Lista()
  {
    Iniciar();
    tam_array_data = 10;
  }
  Lista(int size_array)
  {
    //AQUI LLAMAR AL CONSTRUCTOR SIN ARGUMENTOS
    tam_array_data = size_array;
    Iniciar();
  }
};
----8<------

De todos modos, la forma en que inicializas los datos miembro no está recomendada, es preferible invocar a los constructores en lugar de usar asignaciones. Tu ejemplo queda mejor así:

----8<------
struct Nodo
{
  int* data;
  Nodo* sig;
};

class Lista{
  Nodo* t;
  int tam_array_data;
  int n_els;
  Lista() : tam_array_data(10), n_els(0) {}
  Lista(int size_array) : tam_array_data(size_array), n_els(0) {}
};
----8<------

O mejor todavía, usando valores por defecto para los parámetros, de modo que te ahorras un constructor:

----8<------
struct Nodo
{
  int* data;
  Nodo* sig;
};

class Lista{
  Nodo* t;
  int tam_array_data;
  int n_els;
  Lista(int size_array=10) : tam_array_data(size_array), n_els(0) {}
};
----8<------

Hasta pronto, y perdona por tardar en responder. :)

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


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