Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema con clases derivadas en C++

Estas en el tema de problema con clases derivadas en C++ en el foro de C/C++ en Foros del Web. Hola comunidad! Tengo un problema, estoy creando dos clases, una ClasePrueba y la otra ClasePrueba2. ClasePrueba2 hereda de ClasePrueba, la cual tiene un constructor, y ...
  #1 (permalink)  
Antiguo 29/12/2014, 21:36
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 13 años, 10 meses
Puntos: 2
problema con clases derivadas en C++

Hola comunidad!

Tengo un problema, estoy creando dos clases, una ClasePrueba y la otra ClasePrueba2.

ClasePrueba2 hereda de ClasePrueba, la cual tiene un constructor, y obviamente cuando cree un objeto de ClasePrueba2 voy a necesitar llamar explícitamente al constructor de ClasePrueba, yo se que en Java se puede hacer esto usando la palabra reservada super(). Pero no se como se hace esto mismo en C++

¿Alguien me puede ayudar?

Código C++:
Ver original
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. class ClasePrueba {
  6.    
  7.     private: string nombre;
  8.     int edad;
  9.    
  10.     public:
  11.      ClasePrueba(string name, int age){
  12.         nombre=name;
  13.         edad=age;
  14.     }
  15.    
  16.    
  17.      void establecerNombre(string name){
  18.         nombre=name;
  19.     }
  20.    
  21.     string obtenerNombre(){
  22.         return nombre;
  23.     }
  24.  
  25. };
  26.  
  27. class ClasePrueba2 : public ClasePrueba{
  28.    
  29.     private: string apodo;
  30.    
  31.     public: ClasePrueba2(string name, int age ,string nick){
  32.         super(name,age);
  33.         apodo=nick;
  34.     }
  35. };

También sé que puedo crear otro constructor en ClasePrueba que no haga nada. Así.

Código C++:
Ver original
  1. public:
  2.      ClasePrueba(){
  3.    
  4.     }

Esto funciona, pero no es lo que quiero.

Quiero llamar al constructor de la superclase desde la clase derivada explícitamente.

Gracias!!
  #2 (permalink)  
Antiguo 30/12/2014, 02:33
 
Fecha de Ingreso: octubre-2013
Mensajes: 44
Antigüedad: 10 años, 6 meses
Puntos: 5
Respuesta: problema con clases derivadas en C++

En C++ no se utiliza la llamada super() como en otros lenguajes como Java o Ruby. En su defecto, se utiliza el nombre del constructor explícitamente, quedando algo tal que así:

Código C++:
Ver original
  1. public: ClasePrueba2(string name, int age ,string nick){
  2.         ClasePrueba(name,age);
  3.         apodo=nick;
  4.     }
  #3 (permalink)  
Antiguo 30/12/2014, 20:56
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: problema con clases derivadas en C++

No funciona, me da el mismo error.

Código C++:
Ver original
  1. #include<iostream>
  2. #include<string>
  3. #include<windows.h>
  4. using namespace std;
  5.  
  6.  
  7.  
  8.  
  9. class ClasePrueba {
  10.    
  11.     private: string nombre;
  12.     int edad;
  13.    
  14.     public:
  15.      ClasePrueba(string name, int age){
  16.         nombre=name;
  17.         edad=age;
  18.     }
  19.  
  20.    
  21.      void establecerNombre(string name){
  22.         nombre=name;
  23.     }
  24.    
  25.     string obtenerNombre(){
  26.         return nombre;
  27.     }
  28.  
  29. };
  30.  
  31. class ClasePrueba2 : public ClasePrueba {
  32.    
  33.     private: string apodo;
  34.    
  35.     public: ClasePrueba2(string name, int age ,string nick){
  36.         ClasePrueba(name,age);
  37.         apodo=nick;
  38.        
  39.     }
  40.    
  41.      void establecerApodo(string nick){
  42.         apodo=nick;
  43.     }
  44.    
  45.     string obtenerApodo(){
  46.         return apodo;
  47.     }
  48.    
  49. };
  50.  
  51. main(){
  52.    
  53. //  system("pause");
  54. }
  #4 (permalink)  
Antiguo 31/12/2014, 00:16
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: problema con clases derivadas en C++

Código C++:
Ver original
  1. #include<iostream>
  2. #include<string>
  3. #include<windows.h>
  4. using namespace std;
  5.  
  6.  
  7.  
  8.  
  9. class ClasePrueba {
  10.  
  11.     private:
  12.         string nombre;
  13.         int edad;
  14.        
  15.     public:
  16.         ClasePrueba ( string name, int age ) {
  17.             nombre = name;
  18.             edad = age;
  19.         }
  20.        
  21.        
  22.         void establecerNombre ( string name ) {
  23.             nombre = name;
  24.         }
  25.        
  26.         string obtenerNombre() {
  27.             return nombre;
  28.         }
  29.        
  30. };
  31.  
  32. class ClasePrueba2 : public ClasePrueba {
  33.  
  34.     private:
  35.         string apodo;
  36.    
  37.     public:
  38.         ClasePrueba2 ( string name, int age , string nick ): ClasePrueba( name, age ){
  39.             apodo = nick;
  40.            
  41.         }
  42.        
  43.         void establecerApodo ( string nick ) {
  44.             apodo = nick;
  45.         }
  46.        
  47.         string obtenerApodo() {
  48.             return apodo;
  49.         }
  50.        
  51. };
  52.  
  53. int main() {
  54.  
  55.    
  56.    
  57.     cin.ignore();
  58.     return 0;
  59. }

Mire aqui para una lectura mas comprensiva: http://c.conclase.net/curso/?cap=036b

Te dejo un ejemplo para que vea los constructores destructores y como se llaman de forma por defecto y con parámetros.

Código C++:
Ver original
  1. #include<iostream>
  2. #include<string>
  3. #include<windows.h>
  4. using namespace std;
  5.  
  6. // Clase base:
  7. class Persona {
  8.     public:
  9.         //Constructor por defecto
  10.         Persona() { suNombre = "paco: "; cout << suNombre << " Constructor(defecto) Persona llamado" << endl;  }  // si se llama el constructor por defecto es el de paco
  11.        
  12.         //Constructor con parametros
  13.         Persona( string unNombre ) {
  14.             suNombre = unNombre;
  15.             cout << suNombre << ": Llamado el constructor con parametros de Persona" << endl;            
  16.         }
  17.        
  18.         //Destructor por defecto
  19.         ~Persona() { cout << suNombre << ": Destructor(defecto) Persona llamado" << endl; }
  20.    
  21.         //voy hacer los datos miembros publicos para no liar mucho cacao XD
  22.         //private:
  23.         string suNombre;
  24. };
  25.  
  26. // Clase derivada de persona y base de Vendedor:
  27. class Empleado : public Persona {
  28.     public:
  29.         //Constructor por defecto
  30.         Empleado() { suNombre = "paco: "; cout << suNombre << " Constructor(defecto) Empleado llamado" << endl; }  // si se llama el constructor por defecto es el de paco
  31.        
  32.         //Constructor con parametros
  33.         Empleado( float unSueldo, string unNombre )
  34.         : Persona( unNombre )
  35.         {
  36.             cout << suNombre << ": Llamado el constructor con parametros de Empleado" << endl;
  37.             suSueldo = unSueldo;
  38.         }
  39.        
  40.         //Destructor por defecto
  41.         ~Empleado() { cout << suNombre << ": Destructor(defecto) Empleado llamado" << endl; }
  42.    
  43.         //voy hacer los datos miembros publicos para no liar mucho cacao XD
  44.         //private:
  45.         float suSueldo;
  46. };
  47.  
  48. //clase derivada de las anteriores
  49. class Vendedor : public Empleado {
  50.     public:
  51.         //Constructor por defecto
  52.         Vendedor() { suNombre = "paco: "; cout << suNombre << " Constructor(defecto) Vendedor llamado" << endl; } // si se llama el constructor por defecto es el de paco
  53.        
  54.         //Constructor con parametros
  55.         Vendedor( int unCodigo, float unSueldo, string unNombre )
  56.         : Empleado ( unSueldo, unNombre )
  57.         {
  58.             cout << suNombre << ": Llamado el constructor con parametros de Empleado" << endl;            
  59.             suCodigo = unCodigo;  
  60.         }
  61.        
  62.         //Destructor por defecto
  63.         ~Vendedor() { cout << suNombre << ": Destructor(defecto) Vendedor llamado" << endl; }
  64.    
  65.         //voy hacer los datos miembros publicos para no liar mucho cacao XD
  66.         //private:
  67.         int suCodigo;
  68. };
  69.  
  70.  
  71.  
  72.  
  73.  
  74. int main() {
  75.  
  76.     Vendedor paco;   //prueba el constructor por defecto
  77.  
  78.     cout << endl;
  79.     Vendedor pepe( 22333, 700.00, "Jose Perez" );
  80.  
  81.     cout << endl;    
  82.     cout << "Vemos datos de paco:" << endl;
  83.     cout << "-Nombre: " << pepe.suNombre << endl;  //los llamo directamente por que son publicos los datos, si no deberia hacer funciones para que me retorne esos datos con geters
  84.     cout << "-Sueldo: " << pepe.suSueldo << endl;  //los llamo directamente por que son publicos los datos, si no deberia hacer funciones para que me retorne esos datos con geters
  85.     cout << "-Codigo: " << pepe.suCodigo << endl;  //los llamo directamente por que son publicos los datos, si no deberia hacer funciones para que me retorne esos datos con geters
  86.    
  87.     cout << endl;
  88.     cout << "$Pulse un boton para seguir..." << endl;
  89.     cout << "Ahora se llama destructores(por defecto) en orden inversa a la que han sidos creados" << endl;
  90.     cin.ignore();
  91.     return 0;
  92. }
Espero que sirva de ayuda =)
  #5 (permalink)  
Antiguo 31/12/2014, 13:51
 
Fecha de Ingreso: julio-2010
Mensajes: 191
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: problema con clases derivadas en C++

Muchas Gracias!! Si me sirvió!

Etiquetas: clase, clases, funcion, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:23.