elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  lio con constructores y destructores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: lio con constructores y destructores  (Leído 2,420 veces)
Javincy

Desconectado Desconectado

Mensajes: 5


Ver Perfil
lio con constructores y destructores
« en: 8 Febrero 2012, 08:32 am »

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






En línea

eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: lio con constructores y destructores
« Respuesta #1 en: 8 Febrero 2012, 10:51 am »

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
  1. class caballo{
  2.     public:
  3.       caballo(){}
  4.       caballo (int edad){suEdad = edad;}
  5.       ~caballo(){}
  6.     private:
  7.       int suEdad;
  8. };

Citar
Si 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).

Citar
Algo 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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. class caballo{
  6.     public:
  7.        caballo (int edad)
  8.        {
  9.            cout << "Llamando al constructor 1." << endl;
  10.            suEdad = edad;
  11.        }
  12.  
  13.        caballo ()
  14.        {
  15.            cout << "Llamando al constructor 2." << endl;
  16.        }
  17.  
  18.        ~caballo()
  19.        {
  20.            cout << "Llamando al destructor." << endl;
  21.        }
  22.  
  23.        int obtenerEdad () {return suEdad;};
  24.    private:
  25.        int suEdad;
  26. };
  27.  
  28. int main()
  29. {
  30.    caballo objeto1 (12);
  31.    caballo objeto2;
  32.  
  33.    cout << "Objeto 1: " << objeto1.obtenerEdad() << endl;
  34.    cout << "Objeto 2: " << objeto2.obtenerEdad() << endl;
  35.  
  36.    cin;
  37.    return 0;
  38. }
  39.  

Aqui te lo dejo sin los mensajes para no liarte:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. class caballo{
  6.     public:
  7.        caballo (int edad){suEdad = edad;};
  8.        caballo () {};
  9.        ~caballo(){};
  10.  
  11.        int obtenerEdad () {return suEdad;};
  12.    private:
  13.        int suEdad;
  14. };
  15.  
  16. int main()
  17. {
  18.    caballo objeto1 (12);
  19.    caballo objeto2;
  20.  
  21.    cout << "Objeto 1: " << objeto1.obtenerEdad() << endl;
  22.    cout << "Objeto 2: " << objeto2.obtenerEdad() << endl;
  23.  
  24.    cin;
  25.    return 0;

Saludos.


« Última modificación: 8 Febrero 2012, 11:08 am por eleon » En línea

Javincy

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: lio con constructores y destructores
« Respuesta #2 en: 8 Febrero 2012, 16:18 pm »

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

Gracias otra vez por la respuesta y un abrazote!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines