elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Alguien me ayuda con esta duda? Funciones & Punteros.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Alguien me ayuda con esta duda? Funciones & Punteros.  (Leído 6,447 veces)
XorNet

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Alguien me ayuda con esta duda? Funciones & Punteros.
« en: 4 Octubre 2013, 06:54 am »

Hola bueno es que me puse a revisar un código fuente y pues me tope con unas lineas así:
Código
  1. ZGetGame()->ZMyCharacter();
  2. //También con:
  3. ZCharacter()->GetMaxAP;
  4.  

No entiendo por el simple echo de que son funciones con operador flecha apuntando hacia otra función o otra variable, o sea no sé si me explique, si alguien me puede poner un ejemplo fácil de comprender y una explicación, porque la verdad estoy muy ansioso por aprender esto los he visto en casi todo el código y pues *Emoción* xD


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #1 en: 4 Octubre 2013, 08:25 am »

A ver, tu tienes una estructura o clase cualquiera:

Código
  1. struct estructura
  2. {
  3.  void (*FuncPtr)();
  4. };

Y por otro lado tienes una función que devuelve un puntero a una estructura de este tipo:

Código
  1. struct structura* Funcion( );

Si quieres acceder a algún miembro de la estructura, dado que es puntero tienes que utilizar el operador '->'. Si devolviese la estructura por valor en vez de por referencia tendrías que utilizar el operador '.' para acceder a los miembros de la estructura.

Si, en concreto, quieres acceder al puntero a función almacenado en la estructura, dicho acceso puede escribirse así:

Código
  1. // primera forma:
  2. Funcion( )->FuncPtr( );
  3.  
  4. // segunda forma:
  5. struct estructura* p_estructura = Funcion( );
  6. p_estructura->FuncPtr( );

Pero vamos, que antes de correr tanto ponte a aprender la base, que estas cosas ya irán llegando solas.

Un saludo.


En línea

XorNet

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #2 en: 4 Octubre 2013, 15:52 pm »

A ver, tu tienes una estructura o clase cualquiera:

Código
  1. struct estructura
  2. {
  3.  void (*FuncPtr)();
  4. };

Y por otro lado tienes una función que devuelve un puntero a una estructura de este tipo:

Código
  1. struct structura* Funcion( );

Si quieres acceder a algún miembro de la estructura, dado que es puntero tienes que utilizar el operador '->'. Si devolviese la estructura por valor en vez de por referencia tendrías que utilizar el operador '.' para acceder a los miembros de la estructura.

Si, en concreto, quieres acceder al puntero a función almacenado en la estructura, dicho acceso puede escribirse así:

Código
  1. // primera forma:
  2. Funcion( )->FuncPtr( );
  3.  
  4. // segunda forma:
  5. struct estructura* p_estructura = Funcion( );
  6. p_estructura->FuncPtr( );

Pero vamos, que antes de correr tanto ponte a aprender la base, que estas cosas ya irán llegando solas.

Un saludo.

Oye y este método cómo se llama? O sea que nombre se  le da a este tipo de instrucciones, me explico a las funciones así:
Código
  1. void funcion1(int prueba, ...);
  2.  
Se les denomina Funciones Variadicas, entonces cómo se le denomina a esto que trato de entender?
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #3 en: 4 Octubre 2013, 16:10 pm »

cómo se le denomina a esto que trato de entender?
Es solo una función que retorna un puntero, no tiene un nombre especial.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #4 en: 4 Octubre 2013, 16:15 pm »

Sencillamente, si tienes un objeto de una clase en u variable, lo llamas con "clase.funcion/variable". Si el estás tratando con un puntero a esa clase, es con "clase->funcion/variable".
Por cierto,
Se les denomina Funciones Variadicas
Función Variadica? De donde sacaste eso?
En mi vida lo oí xD
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #5 en: 4 Octubre 2013, 16:34 pm »

Por cierto,Función Variadica? De donde sacaste eso?
En mi vida lo oí
Son las funciones que reciben un numero variable de argumentos, por ejemplo printf o scanf. Mas información en la pagina (cortesía de Wikipedia) Variadic function.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #6 en: 4 Octubre 2013, 16:48 pm »

Ah, al ponerle la 'a' no me fijé xD
Nunca usé esa librería la verdad.
Prefiero usar sobrecarga.
En línea

XorNet

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #7 en: 4 Octubre 2013, 19:55 pm »

Bueno hasta ahora he tratado de entender pero pues no lo he logrado xd, cuando trato de compilar esto:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Prueba {
  6. public:
  7. void saludo() { cout << "Saludo desde la función!\n"; }
  8. Prueba() { }
  9. };
  10.  
  11. int main() {
  12. Prueba* pPrueba( );
  13.  
  14. pPrueba()->saludo();
  15.  
  16. system("pause>nul");
  17.  
  18. return 0;
  19. }
  20.  
Pero me da error, alguien me dice porque? Es obvio que lo estoy haciendo super mal pero por eso pongo el código para saber porque y me orienten.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #8 en: 4 Octubre 2013, 20:12 pm »

Código
  1. Prueba* pPrueba( );

Esta línea está mal.

Los objetos se pueden crear, bien de forma estática:

Código
  1. Prueba pPrueba( );

Bien de forma dinámica:

Código
  1. Prueba* pPrueba = new Prueba( );

Pero lo que tu has puesto es una forma híbrida que no funciona.

Por cierto, si creas un objeto con new... recuerda que has de poner un delete cuando dejes de usarlo... si no vas a dejar tu programa plagado de lagunas de memoria.

Código
  1. int main() {
  2. Prueba* pPrueba = new Prueba( );
  3.  
  4. pPrueba()->saludo();
  5.  
  6.        delete pPrueba( );
  7.  
  8. system("pause>nul");
  9.  
  10. return 0;
  11. }
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Alguien me ayuda con esta duda? Funciones & Punteros.
« Respuesta #9 en: 4 Octubre 2013, 20:16 pm »

2 cosas:

1)
Código
  1. Prueba* pPrueba = new Prueba();
Eso solo era un puntero. Tienes que asignarle una variable. (new ...)

2) Pusiste "pPrueba()->saludo();
La variable no tiene paréntesis.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con esta duda/ ¿Reto?
Desarrollo Web
noobAtKeyboard 1 2,029 Último mensaje 24 Mayo 2014, 06:42 am
por gastontoth
(Duda) Alguien me ayuda?
Java
Odask 1 1,583 Último mensaje 23 Agosto 2014, 17:11 pm
por l3ad Programmer
Ayuda en funciones,acciones y duda
Programación C/C++
SojatDotar 0 1,395 Último mensaje 11 Octubre 2015, 00:30 am
por SojatDotar
DUDA Punteros a funciones
Programación C/C++
mechanicalgirl 1 1,620 Último mensaje 5 Enero 2018, 03:22 am
por CalgaryCorpus
Alguien me ayuda aplicar esta Formula « 1 2 »
Foro Libre
El_Andaluz 15 5,762 Último mensaje 30 Abril 2018, 02:15 am
por El_Andaluz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines