Dev - C++ - apuntador a función

   
Vista:

apuntador a función

Publicado por laenos (3 intervenciones) el 15/06/2015 22:24:24
Supongamos que tenemos definida una clase base y una clase derivada de esta. Dentro de la clase derivada tenemos definida la función FuncionDerivada en la cual se obtiene la variable wstring Vble. Puedo obtener el valor de Vble en la clase base a través de un apuntador? Sería correcto lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CClaseBase{
Public:
Void FuncionBase;
CClaseDerivada  *m_pVble; // defino un apuntador a un objeto de la clase Derivada
};
 
Void CClaseBase::FuncionBase{
nVble=m_pVble->Vble; // apuntador a la variable Vble de la clase derivada.
}
 
CClaseDerivada{
 
void FuncionDerivada;
 
};
 
Void CClaseDerivada::FuncionDerivada{
Wstring Vble;
Vble = getInfoString();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

apuntador a función

Publicado por laenos (3 intervenciones) el 16/06/2015 08:46:48
1
2
3
4
5
6
7
8
9
CClaseDerivada::CClaseBase{
 
 
 
void FuncionDerivada;
 
 
 
};
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

apuntador a función

Publicado por laenos (3 intervenciones) el 16/06/2015 11:14:17
Perdon de nuevo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CClaseBase{
 
Public:
Void FuncionBase();
CClaseDerivada  *m_pVble; // defino un apuntador a un objeto de la clase Derivada
 
};
 
 
Void CClaseBase::FuncionBase{
 
wstring nVble;
nVble=m_pVble->Vble; // apuntador a la variable Vble de la clase derivada.
 
}
 
CClaseDerivada:Public CClaseBase{
 
Public:
void FuncionDerivada();
}
 
Void CClaseDerivada::FuncionDerivada{
 
Wstring Vble;
Vble = getInfoString();
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

apuntador a función

Publicado por Rene gar (50 intervenciones) el 22/06/2015 22:47:05
Me pregunto como vas intentar declarar una variable de tipo clasederivada dentro de clasebase es algo ilogico como que un atributo del hijo este dentro de uno del padre cuando el padre siempre es primero que el hijo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

apuntador a función

Publicado por vangodp (287 intervenciones) el 23/06/2015 02:04:15
En realidad si se puede, aun que no le veo del todo la ventaja de eso. Bastaria con poner el prototipo de la clase derivada adelante de la base.

Pero tal como quiere hacer el no le veo del todo derecho. el quiere salir declarando un puntero y tener acceso a la declaracion de la clase.

piense bien... No puedes hacer eso:

unaClase* punteroDeUnaClase;


y salir usando sus miembros sin más tal como
punteroDeUnaClase;->variableMiembro;

en Vez de eso deberia asignar un objeto a ese puntero primero, ya que ese puntero no apunta nada aun.... Seria hacer
unaClase* punteroDeUnaClase;
unaClase objetoDeUnaClase;
punteroDeUnaClase = &objetoDeUnaClase;

ato seguido ya si, entonces podría "supongo" acceder al objeto a través del puntero. en realidad no lo voy a probar, y no estoy seguro de si funciona o no, paso del tema, solo vengo a mostrar el camino, ya después me comenten si os parece.

Lo que quiero decir es que no adelanta declarar un puntero para poder usarlo, antes deberías asignar algo a ese puntero para poder usarlo, hacer que apunte algo, un puntero que no apunta nada no sirve de nada, y aun es peligroso si no esta inicializado a null.

como dije antes si haces así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
 
class Base{
public:
    Derivada  *m_pVble; // defino un apuntador a un objeto de la clase Derivada
};
 
class Derivada: public Base{
public:
    void FuncionDerivada();
};
 
int main () {
 
    cin.ignore();
    return 0;
}
...no te va funcionar lo que el quiere, pero a cambio si pones el prototipo de la clase adelante de esta forma, verás que el compilador no chilla.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
class Derivada;  // <-prototipo de clase O.o
 
class Base{
public:
    Derivada  *m_pVble; // defino un apuntador a un objeto de la clase Derivada
};
 
class Derivada: public Base{
public:
    void FuncionDerivada();
};
 
int main () {
 
    cin.ignore();
    return 0;
}

Eso no son cosas que se aprendan en embarcadero eh eh XD. Y que java se las va tragar XD

Si consiguen lo hacer lo que buscan avisen acá ^^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

apuntador a función

Publicado por Rene gar (50 intervenciones) el 23/06/2015 05:55:56
te dejo la version en java para que veas posibles diferiencias no tomes mis comentarios a mal que no son para joder
lo de "tragar" no fue en el sentido de que java sea mejor que c++ y en embarcadero se aplica el mismo c++ que en todos lados lo que paso es que no recodaba los prototipos de clase que tu muy bien dijiste.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class ManejoDeObjetos {
 
  public static void main(String[] args) {
 
      Padre p=new Padre();
      p.derivada=new Hijo();
      p.funcionPadre();//accedemos a su funcion propia
      p.derivada.funcionHijo();//accedemos a la funcion hijo desde un atributo de funcion padre
 
  }
}
 
class Padre{
 
   public Hijo derivada;//esto seria el equivalente al prototipo
 
   public void funcionPadre(){
 
        System.out.println("soy la funcion padre");
 
   }
 
 
}
 
class Hijo extends Padre{
 
    public void funcionHijo(){
 
        System.out.println("Soy la funcion hijo");
 
    }
 }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

apuntador a función

Publicado por vangodp (287 intervenciones) el 23/06/2015 15:28:40
jeje No estoy enfadado, ni me enfado por ese tipo de cosas.

Tú usas varios lenguajes yo solo uso uno, tú sabes cual es "mejor" para cada situación, y con mejor digo en rendimiento y tiempo de desarrollo, te refieres a que java se va "tragar" C++, te comprendo, tiene más salida laboral, lo sé, pero como no voy a trabajar con el profesionalmente, no me importa.

Podría aprender Java si quisiera, pero por el momento no veo motivo para ello, paso de teléfonos con Android, si los compro no sería por aplicaciones, de echo me gustan los Nokias y tengo uno, porque traen una buena cámara, es cuestión de gustos, seguro la mayoría de las personas eligen a Android por las aplicaciones.

Aun que me pases código en Java no voy a saber exactamente lo que hace ya que no se programar en ese lenguaje, pero seguro que tiene una solución al problema también, si java es una navaja Suiza XD.

Volviendo al tema, como he dicho antes, poder declarar el puntero hijo en la madre sí se puede, pero realmente sigo sin comprender el propósito de eso. En fin, suerte y no discutamos más por tonterías que ambos sabemos que los lenguajes están echos por gente mucho más experta que nosotros y todos están pensados para cosas distintas, tienen ventajas y desventajas.

Yo soy medio masoquista últimamente he dado por aprender Assembler jajaja.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar