Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: maikelowen en 10 Abril 2014, 19:47 pm



Título: Duda sobre el tema de Herencia en c++
Publicado por: maikelowen en 10 Abril 2014, 19:47 pm
Hola,soy principiante en esto de la programación y llevo un un buen rato intentando ver donde tengo el fallo pero no hay manera... no consigo establecer la herencia entre las dos clases que he creado y que esta clase derivada ,en mi caso "Empleado" incluya los atributos de mi clase principal "Persona".
¿Podríais echarle un vistazo a  ver donde tengo el fallo? :huh:
-Utilizo netbeans- 
Un saludo y gracias de antemano.

/*
 * File:   main.cpp
 * Author: Owen10
 *
 * Created on 10 de abril de 2014, 18:44
 */

#include <cstdlib>
#include <iostream>

#include "Persona.h"
#include "Empleado.h"

using namespace std;

/*
 *
 */
int main(int argc, char** argv) {

    Persona p("Owen");
 
   
   
 
    Empleado e;
   
   cout<< e.nombre;
   
   
}



/*
 * File:   Empleado.cpp
 * Author: Owen10
 *
 * Created on 10 de abril de 2014, 18:50
 */

#include "Empleado.h"



Empleado::Empleado(const Empleado& orig) {
}

Empleado::~Empleado() {
}

Empleado::Empleado():Persona(nombre){
   


/*
 * File:   Empleado.h
 * Author: Owen10
 *
 * Created on 10 de abril de 2014, 18:50
 */

#ifndef EMPLEADO_H
#define   EMPLEADO_H
#include "Persona.h"

#include <iostream>
using namespace std;


class Empleado: public Persona{
   
public:
    Empleado();
    Empleado(const Empleado& orig);
    virtual ~Empleado();
   
    Empleado();
private:

   
   
};




/*
 * File:   Persona.cpp
 * Author: Owen10
 *
 * Created on 10 de abril de 2014, 18:45
 */

#include "Persona.h"


Persona::Persona(string Nombre){
    Nombre=nombre;
}


Persona::Persona(){
   
   
   
}

Persona::Persona(const Persona& orig) {
}

Persona::~Persona() {
}



/*
 * File:   Persona.h
 * Author: Owen10
 *
 * Created on 10 de abril de 2014, 18:45
 */

#ifndef PERSONA_H
#define   PERSONA_H

#include <iostream>
using namespace std;

class Persona {
public:
 
    Persona();
    Persona(const Persona& orig);
    virtual ~Persona();
    Persona(string Nombre);
   
   
 string nombre;
    int edad;
   
   
   
private:
   

};

#endif   /* PERSONA_H */


Título: Re: Duda sobre el tema de Herencia en c++
Publicado por: vangodp en 10 Abril 2014, 21:16 pm
Bueno no es que sea un fiera en herencia pero intente arreglar lo que vi... y son unos cuantos errores.
Paso los archivos para que veas.
Tienes que crear un proyecto en codeblocks por ejemplo para que te compile correctamente.

Código
  1. /*
  2.  * File:   Persona.h
  3.  * Author: Owen10
  4.  *
  5.  * Created on 10 de abril de 2014, 18:45
  6.  */
  7.  
  8. #ifndef PERSONA_H
  9. #define PERSONA_H
  10.  
  11. #include <iostream>
  12. using namespace std;
  13.  
  14. class Persona {
  15. public:
  16.  
  17. Persona();
  18. virtual ~Persona();
  19. Persona ( const Persona & orig );
  20. Persona ( string unNombre );
  21.  
  22.  
  23. string suNombre;
  24. int suEdad;
  25.  
  26. private:
  27.  
  28.  
  29. };
  30. #endif   /* PERSONA_H */
  31.  

Código
  1. /*
  2.  * File:   Empleado.h
  3.  * Author: Owen10
  4.  *
  5.  * Created on 10 de abril de 2014, 18:50
  6.  */
  7.  
  8. #ifndef EMPLEADO_H
  9. #define EMPLEADO_H
  10. #include "Persona.h"
  11.  
  12. #include <iostream>
  13. using namespace std;
  14.  
  15.  
  16. class Empleado: public Persona {
  17.  
  18. public:
  19. Empleado();
  20.        Empleado( string unNombre );
  21. Empleado ( const Empleado & orig );
  22. virtual ~Empleado();
  23.  
  24. private:
  25.  
  26. };
  27. #endif /* EMPLEADO_H */
  28.  

Código
  1. /*
  2.  * File:   Persona.cpp
  3.  * Author: Owen10
  4.  *
  5.  * Created on 10 de abril de 2014, 18:45
  6.  */
  7.  
  8. #include "Persona.h"
  9.  
  10. Persona::Persona() {}
  11.  
  12. Persona::Persona ( string unNombre ) { suNombre = unNombre; }
  13.  
  14. Persona::Persona ( const Persona & orig ) {}
  15.  
  16. Persona::~Persona() {}
  17.  

Código
  1. /*
  2.  * File:   Empleado.cpp
  3.  * Author: Owen10
  4.  *
  5.  * Created on 10 de abril de 2014, 18:50
  6.  */
  7.  
  8. #include "Empleado.h"
  9.  
  10. Empleado::Empleado( string unNombre ) : Persona ( unNombre ) {}
  11. Empleado::Empleado ( const Empleado & orig ) {}
  12. Empleado::~Empleado() {}
  13.  

Código
  1. /*
  2.  * File:   main.cpp
  3.  * Author: Owen10
  4.  *
  5.  * Created on 10 de abril de 2014, 18:44
  6.  */
  7.  
  8. #include <cstdlib>
  9. #include <iostream>
  10.  
  11. #include "Persona.h"
  12. #include "Empleado.h"
  13.  
  14. using namespace std;
  15.  
  16. /*
  17.  *
  18.  */
  19. int main ( int argc, char ** argv ) {
  20. Empleado e("romoardo");
  21. cout << e.suNombre;
  22. }
  23.  

Lo errores había de todo los tipos XDD
Faltaba algunos cierre de llaves también.

Compara el código con el tuyo y ya veras que errores hay.
Si tienes duda pues sigue preguntando.

La herencia ya funciona, como ves he creado un objeto tipo Empleado y le asigno un nombre. Si vas a la clase veras que no tiene la variable miembro suNombre, la recibe de la clase persona ;)
Espero que te compile bien :D
Si necesitas el proyecto te lo subo también pero creo que no hace falta, solo creas un proyecto vació agregas todos los archivos y después marque que compile solo los .cpp
Suerte. :D

Ahora intenta pasar como privado las variables de la clase persona. Las variables no deben ser publicas, como minimo protected


Título: Re: Duda sobre el tema de Herencia en c++
Publicado por: amchacon en 10 Abril 2014, 21:21 pm
No es necesario que pongas el constructor copia/destructor si no lo vas a implementar. Ya lo hace el compilador por ti.

De hecho aqui es contraproducente. Prueba a hacer una copia del objeto, a ver si lo copia bien ^^


Título: Re: Duda sobre el tema de Herencia en c++
Publicado por: maikelowen en 10 Abril 2014, 21:51 pm
muchas gracias !  ;-) ya lo he entendido,aparte lo he empezado a hacer de cero y me ha salido.

Un saludo.