Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Miseryk en 24 Noviembre 2015, 01:01 am



Título: [AYUDA] Interface?
Publicado por: Miseryk en 24 Noviembre 2015, 01:01 am
Buenas a todos, estoy necesitando hacer algo pero no sé como lo puedo llegar a lograr, la cuestión es la siguiente, tengo un código en Java y quiero pasarlo a Visual C++ (2013):

Yo en otro lenguaje tengo lo que es una Interface (java)

Código
  1. public Interface IClase
  2. {
  3.    public void Funcion1();
  4.    public void Funcion2();
  5. }
  6.  
  7. public class A implements IClase
  8. {
  9.    @Override
  10.    public void Funcion1()
  11.    {
  12.        //CODIGO
  13.    }
  14.  
  15.    @Override
  16.    public void Funcion2()
  17.    {
  18.        //CODIGO
  19.    }
  20. }
  21.  
  22. public class B implements IClase
  23. {
  24.    @Override
  25.    public void Funcion1()
  26.    {
  27.        //CODIGO
  28.    }
  29.  
  30.    @Override
  31.    public void Funcion2()
  32.    {
  33.        //CODIGO
  34.    }
  35. }
  36.  
  37. public class C implements IClase
  38. {
  39.    @Override
  40.    public void Funcion1()
  41.    {
  42.        //CODIGO
  43.    }
  44.  
  45.    @Override
  46.    public void Funcion2()
  47.    {
  48.        //CODIGO
  49.    }
  50. }
  51.  
  52. public class Tester
  53. {
  54.    private IIClase prueba;
  55.  
  56.    public void setPrueba(IClase param1)
  57.    {
  58.        this.prueba = param1;
  59.    }
  60. }
  61.  
  62. void setUp()
  63. {
  64.    Test Test1 = new Test();
  65.    A A1 = new A();
  66.    B B1 = new B();
  67.    C C1 = new C();
  68.  
  69.    Test1.setPrueba(A1);
  70.    Test1.setPrueba(B1);
  71.    Test1.setPrueba(C1);
  72. }
  73.  

Qué significa ésto? Significa que dentro de la clase Test tengo una variable como una interface y que tengo 3 clases "diferentes" que comparte una lógica y quiero poder "meter" dentro de esa variable, cualquiera de esas 3 clases, pero C++, alguna idea?

Mientras sigo buscando alguna solución.

No me importa si es programación ninja o villera, quiero poder hacerlo.

Gracias!


Título: Re: [AYUDA] Interface?
Publicado por: ivancea96 en 24 Noviembre 2015, 16:31 pm
Un ejemplo:

Código
  1. class IClase{
  2. public:
  3.    virtual void Funcion1() = 0;
  4. }
  5.  
  6. class A : public IClase{
  7. public:
  8.    virtual void Funcion1(){
  9.        //...
  10.    }
  11. }


Título: Re: [AYUDA] Interface?
Publicado por: Miseryk en 24 Noviembre 2015, 22:26 pm
Un ejemplo:

Código
  1. class IClase{
  2. public:
  3.    virtual void Funcion1() = 0;
  4. }
  5.  
  6. class A : public IClase{
  7. public:
  8.    virtual void Funcion1(){
  9.        //...
  10.    }
  11. }

Sí, éso es todo muy lindo, pero no puedo hacer

Código
  1. Class Test
  2. {
  3.    public:
  4.        IClase MyIClase; //Error 1 error C2259: 'IClase' : cannot instantiate abstract class,
  5.  
  6. }
  7.  


Título: Re: [AYUDA] Interface?
Publicado por: ivancea96 en 24 Noviembre 2015, 23:36 pm
Porque es una clase abstracta. Una clase abstracta no se puede instanciar, va en contra de la utilidad de una clase abstracta. De la misma forma, una interface no se instancia.

¿Por qué quieres crear un objeto de una clase abstracta? Estarías creando un objeto sin sentido.

Si lo que quieres es guardar dentro de una variable de la clase IClase, un objeto que herede de esta, tendrás que hacer un puntero.