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.