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:
class caballo{
public:
caballo(){}
caballo (int edad){suEdad = edad;}
~caballo(){}
private:
int suEdad;
};
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).
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:
#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:
#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.