Autor
|
Tema: Alguien me ayuda con esta duda? Funciones & Punteros. (Leído 6,447 veces)
|
XorNet
Desconectado
Mensajes: 14
|
Hola bueno es que me puse a revisar un código fuente y pues me tope con unas lineas así: ZGetGame()->ZMyCharacter(); //También con: ZCharacter()->GetMaxAP;
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
Mensajes: 1.248
|
A ver, tu tienes una estructura o clase cualquiera: struct estructura { void (*FuncPtr)(); };
Y por otro lado tienes una función que devuelve un puntero a una estructura de este tipo: 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í: // primera forma: Funcion( )->FuncPtr( ); // segunda forma: struct estructura* p_estructura = Funcion( ); 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
Mensajes: 14
|
A ver, tu tienes una estructura o clase cualquiera: struct estructura { void (*FuncPtr)(); };
Y por otro lado tienes una función que devuelve un puntero a una estructura de este tipo: 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í: // primera forma: Funcion( )->FuncPtr( ); // segunda forma: struct estructura* p_estructura = Funcion( ); 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í: void funcion1(int prueba, ...);
Se les denomina Funciones Variadicas, entonces cómo se le denomina a esto que trato de entender?
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 1.639
|
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
Mensajes: 3.412
ASMático
|
Ah, al ponerle la 'a' no me fijé xD Nunca usé esa librería la verdad. Prefiero usar sobrecarga.
|
|
|
En línea
|
|
|
|
XorNet
Desconectado
Mensajes: 14
|
Bueno hasta ahora he tratado de entender pero pues no lo he logrado xd, cuando trato de compilar esto: #include <iostream> using namespace std; class Prueba { public: void saludo() { cout << "Saludo desde la función!\n"; } Prueba() { } }; int main() { Prueba* pPrueba( ); pPrueba()->saludo(); system("pause>nul"); return 0; }
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
Mensajes: 1.248
|
Prueba* pPrueba( );
Esta línea está mal. Los objetos se pueden crear, bien de forma estática: Prueba pPrueba( );
Bien de forma dinámica: 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. int main() { Prueba* pPrueba = new Prueba( ); pPrueba()->saludo(); delete pPrueba( ); system("pause>nul"); return 0; }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
2 cosas: 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con esta duda/ ¿Reto?
Desarrollo Web
|
noobAtKeyboard
|
1
|
2,029
|
24 Mayo 2014, 06:42 am
por gastontoth
|
|
|
(Duda) Alguien me ayuda?
Java
|
Odask
|
1
|
1,583
|
23 Agosto 2014, 17:11 pm
por l3ad Programmer
|
|
|
Ayuda en funciones,acciones y duda
Programación C/C++
|
SojatDotar
|
0
|
1,395
|
11 Octubre 2015, 00:30 am
por SojatDotar
|
|
|
DUDA Punteros a funciones
Programación C/C++
|
mechanicalgirl
|
1
|
1,620
|
5 Enero 2018, 03:22 am
por CalgaryCorpus
|
|
|
Alguien me ayuda aplicar esta Formula
« 1 2 »
Foro Libre
|
El_Andaluz
|
15
|
5,762
|
30 Abril 2018, 02:15 am
por El_Andaluz
|
|