lio con constructores y destructores

Iniciado por Javincy, 8 Febrero 2012, 08:32 AM

0 Miembros y 1 Visitante están viendo este tema.

Javincy

Buenas a todos,

No me entero muy bien con el tema de sobrecarga de constructores en c++, a ver si me podeis dar un poco de claridad en el asunto.


Al declarar un constructor para que reciba un parametro el compilador no me crea uno por defecto... por lo que lo creo yo para que me de servicio...
-------------------------------------------------------
class caballo{
     public:
       caballo(){}
       caballo (int edad){suEdad = edad;}
       ~caballo(){}
     private:
       int suEdad;
};
-------------------------------------------------------
Si en el main creo un objeto caballo(12) utilizando el constructor con parametros todo funciona perfectamente.
Si en el main creo un objeto caballo() sin parametros casca devolviendome "caballo()no es clase"


Algo se me esta escapando...¿tengo que crear un destructor para cada constructor?¿la sintaxis?

Gracias de antemano





eleon

#1
Los constructores se pueden sobrecargar, es decir, puedes crear varios dentro de una misma clase teniendo todos el mismo nombre pero diferenciándose en el número o tipo de argumentos.

Lo que has hecho es correcto:

Código (cpp) [Seleccionar]
class caballo{
    public:
      caballo(){}
      caballo (int edad){suEdad = edad;}
      ~caballo(){}
    private:
      int suEdad;
};


CitarSi en el main creo un objeto caballo() sin parametros casca devolviendome "caballo()no es clase"

El compilador tomará el constructor "caballo(){}" como el de defecto, y por lo tanto para llamar a este no hay que poner "caballo objeto()" sino "caballo objeto" (sin paréntesis, ahi tu error).

CitarAlgo se me esta escapando...¿tengo que crear un destructor para cada constructor?¿la sintaxis?

A diferencia de los constructores, los destructores no se pueden sobrecargar, se crea uno por clase sin argumentos ni valor de retorno y ese es el que hay para destruir todos los objetos.

Te pongo un ejemplo para que veas cuándo se llama a cada cosa:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;


class caballo{
    public:
       caballo (int edad)
       {
           cout << "Llamando al constructor 1." << endl;
           suEdad = edad;
       }

       caballo ()
       {
           cout << "Llamando al constructor 2." << endl;
       }

       ~caballo()
       {
           cout << "Llamando al destructor." << endl;
       }

       int obtenerEdad () {return suEdad;};
   private:
       int suEdad;
};

int main()
{
   caballo objeto1 (12);
   caballo objeto2;

   cout << "Objeto 1: " << objeto1.obtenerEdad() << endl;
   cout << "Objeto 2: " << objeto2.obtenerEdad() << endl;

   cin;
   return 0;
}


Aqui te lo dejo sin los mensajes para no liarte:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;


class caballo{
    public:
       caballo (int edad){suEdad = edad;};
       caballo () {};
       ~caballo(){};

       int obtenerEdad () {return suEdad;};
   private:
       int suEdad;
};

int main()
{
   caballo objeto1 (12);
   caballo objeto2;

   cout << "Objeto 1: " << objeto1.obtenerEdad() << endl;
   cout << "Objeto 2: " << objeto2.obtenerEdad() << endl;

   cin;
   return 0;


Saludos.

Javincy

Muchas gracias por el empujon eleon, sin parentesis consigo crear el objeto sin problemas.

Gracias otra vez por la respuesta y un abrazote!