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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Duda] Funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Duda] Funciones  (Leído 2,559 veces)
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
[Duda] Funciones
« en: 11 Julio 2013, 04:56 am »

Bueno es qué me puse a trabajar con un source enorme de un mmorpg para tratar de desarrollar conocimiento sobre este lenguaje pero a medida qué lo veia me encontre con estos 2 condicionales:

Código
  1. if( !GetLocatorDBMgr()->GetBlockCountryCodeList(bcl) )
  2. {
  3. DeleteCountryFilter();
  4. mlog( "Fail to Init BlockCountryCode.\n" );
  5. return false;
  6. }
  7.  
  8. if( !GetLocatorDBMgr()->GetCustomIPList(cil) )
  9. {
  10. DeleteCountryFilter();
  11. mlog( "Fail to Init CustomIPList.\n" );
  12. return false;
  13. }
  14.  

Como pueden notar en las lineas:
Código
  1. if( !GetLocatorDBMgr()->GetBlockCountryCodeList(bcl) )
  2. if( !GetLocatorDBMgr()->GetCustomIPList(cil) )
  3.  
  4. /*
  5. El GetLocatorDBMgr() asumo qué por tener paréntesis en una función pero porqué una función tiene el operador de indirección de punteros (->) ? Alguien me explica esto?
  6. */
  7.  


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Duda] Funciones
« Respuesta #1 en: 11 Julio 2013, 08:20 am »

Las funciones no tienen operadores de indirección.

Lo que sucede es que una función puede devolver algo... y ese algo si puede tener operadores de indirección o, directamente, ser un puntero.

Ejemplo:

Código
  1. class poo
  2. {
  3.  public:
  4.    int a;
  5. };
  6.  
  7. poo* func( );
  8.  
  9. int main( ... )
  10. {
  11.  // ...
  12.  
  13.  func( )->a = 7;
  14. }

De todas formas, visto tu nivel te recomiendo empezar con cosas más sencillas... conseguirás metas más fácilmente y eso te motivará más que lo que estás intentando hacer ahora.



En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [Duda] Funciones
« Respuesta #2 en: 11 Julio 2013, 10:20 am »

Las funciones no tienen operadores de indirección.
Las funciones no, pero un puntero a una clase sí  ;)
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Duda] Funciones
« Respuesta #3 en: 11 Julio 2013, 19:26 pm »

Las funciones no tienen operadores de indirección.

Lo que sucede es que una función puede devolver algo... y ese algo si puede tener operadores de indirección o, directamente, ser un puntero.

Ejemplo:

Código
  1. class poo
  2. {
  3.  public:
  4.    int a;
  5. };
  6.  
  7. poo* func( );
  8.  
  9. int main( ... )
  10. {
  11.  // ...
  12.  
  13.  func( )->a = 7;
  14. }

De todas formas, visto tu nivel te recomiendo empezar con cosas más sencillas... conseguirás metas más fácilmente y eso te motivará más que lo que estás intentando hacer ahora.



Y cual es la diferencia entre hacerlo con paréntesis y sin paréntesis ?
Por lo qué pude ver los qué tienen paréntesis son punteros qué no apuntan hacía ningún otro objeto si no hacía los datos miembros de la clase.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [Duda] Funciones
« Respuesta #4 en: 12 Julio 2013, 03:48 am »

Las funciones no tienen operadores de indirección.
Desconozco cual sea el caso en C++ pero en C es posible (y confuso) aplicar (o no, es al gusto) los operadores de indirecion y "dirección de" en el caso de funciones. Por ejemplo este programa:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int (*p)(char const *);
  7.  
  8.   p = puts;
  9.   p("Linea 1");
  10.   (*p)("Linea 2");
  11.  
  12.   p = &puts;
  13.     (*p)("Linea 3");
  14.    (**p)("Linea 4");
  15.   (***p)("Linea 5");
  16.  
  17.   return EXIT_SUCCESS;
  18. }
Es valido.

----

Y cual es la diferencia entre hacerlo con paréntesis y sin paréntesis ?
Esto tienes que explicarlo mejor ya que todos los ejemplos hasta el momento involucran llamadas a función y, por ende, paréntesis.

Por lo qué pude ver los qué tienen paréntesis son punteros qué no apuntan hacía ningún otro objeto si no hacía los datos miembros de la clase.
No. Tienes que revisar la expresión por partes. Si tomamos el ejemplo de eferion, la sentencia en cuestión es:
Código
  1. func()->a = 7;

Los pasos al evaluar la expresión son:

1) La llamada a función "func()" resulta en un puntero de tipo "poo *".

2) Cuando se trabaja con punteros a estructuras o clases se puede utilizar el operador "->" para aplicar indireccion y acceder al campo indicado (a la derecha del operador y en este caso de nombre "a").

3) En el mentado campo (indicado por el paso anterior) se almacena el valor 7.

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
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Duda] Funciones
« Respuesta #5 en: 12 Julio 2013, 09:21 am »

Y cual es la diferencia entre hacerlo con paréntesis y sin paréntesis ?
Por lo qué pude ver los qué tienen paréntesis son punteros qué no apuntan hacía ningún otro objeto si no hacía los datos miembros de la clase.

Pues a ver, si tu tienes

Código
  1. class poo
  2. {
  3.  public:
  4.  
  5.    // ...
  6.  
  7.     std::string* Cadena( )
  8.     { return _string; }
  9.  
  10.    // ...
  11.  
  12.  private:
  13.  
  14.    std::string* _string;
  15. }

Y deseas recuperar el puntero a la cadena forzosamente tienes que llamar a la función Cadena. Hacer esa llamada te va a retornar un puntero que puedes usar inmediatamente dentro de la misma instrucción.

Código:
int main( ... )
{
  poo clase;

 // ...

  // Esto ...
  int length = clase.Cadena( )->length( );

  // ... es equivalente a ...
  std::string* cadena = clase.Cadena( );
  int length = cadena->length( );

  // ...
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con Funciones.
Programación C/C++
freecom4ever 3 2,542 Último mensaje 14 Marzo 2012, 19:52 pm
por Eternal Idol
funciones duda
Programación C/C++
ALONSOQ 5 3,066 Último mensaje 27 Julio 2012, 17:23 pm
por rir3760
Duda con funciones en C.
Programación C/C++
Danirs 6 3,611 Último mensaje 24 Octubre 2012, 02:21 am
por rir3760
Duda funciones C++
Programación C/C++
javiherro 1 1,655 Último mensaje 30 Septiembre 2013, 13:00 pm
por eferion
Duda con funciones inline.
Programación General
SARGE553413 0 1,724 Último mensaje 15 Julio 2014, 13:42 pm
por SARGE553413
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines