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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  oerador de ambito :: o doble dos puntos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: oerador de ambito :: o doble dos puntos  (Leído 9,692 veces)
dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
oerador de ambito :: o doble dos puntos
« en: 10 Octubre 2011, 03:12 am »

http://www.zator.com/Cpp/E4_9_19.htm
http://www.hackingballz.com/herramientas/manual-oficial-de-php/language.oop5.paamayim-nekudotayim.html

hola, mirando unos codigos mesurgio una duda sobre un operador que nunca me enseniaron completamente, es el doble dos puntos, por ejemplo en el compilador dentro del main si pongo
"::" sale un cartel con algunas opciones, pero en otros codigos mas precisamente en codigos de clases personalizadas, he visto como se llaman a funciones de windows usando ese operador, quisiera saber para que se hace esto, nunca lo supe  :-[
por ahi es algo tonto pero no me lo enseniaron  :¬¬



Uploaded with ImageShack.us

unos ejemplos que encontree

Código:
bool CAppGetReso::OnInit()
{
    //! Initialize all image handlers.
    ::wxInitAllImageHandlers();

    //~ Initialize all XRC handlers.
    wxXmlResource::Get()->InitAllHandlers();

    //~ Return true to continue processing.
    return(true);
}

Código:
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
::EnterCriticalSection(&lock);

if(idEvent == pTimer)
{
KillTimer(NULL, pTimer);
ResumeThread();

}

::LeaveCriticalSection(&lock);
}

otro ejemplo
Código:

class SimpleControl
{
public:
    SimpleControl (HWND hwndParent, int id)
        : _hWnd (GetDlgItem (hwndParent, id))
    {}

    void SetFocus ()
    {
        ::SetFocus (_hWnd);
    }

    // code is the HIWORD (wParam)
    static BOOL IsClicked (int code)
    {
        return code == BN_CLICKED;
    }

    HWND Hwnd () const { return _hWnd; }

    void Enable ()
    {
        EnableWindow (_hWnd, TRUE);
    }

    void Disable ()
    {
        EnableWindow (_hWnd, FALSE);
    }

    void SetFont (HFONT font)
    {
        SendMessage ( Hwnd (), WM_SETFONT, (WPARAM) font, MAKELPARAM(TRUE, 0));
    }
protected:
    HWND _hWnd;
};


« Última modificación: 10 Octubre 2011, 03:16 am por dewolo » En línea

LearningSpanishProgrammer

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: oerador de ambito :: o doble dos puntos
« Respuesta #1 en: 10 Octubre 2011, 03:36 am »

Eso llama la función que está en global (public, unnamed) namespace
Como las funciones del "stdio.h" y "stdlib.h"

Código
  1.  struct Test
  2.  {
  3.     int printf(const char *)
  4.     {
  5.     puts("Test::printf");
  6.     }
  7.  
  8.     void test()
  9.     {
  10.         printf("Ola!"); // class printf
  11.         ::printf("Ola"); // global (stdio.h)
  12.     }
  13.  };
  14.  
  15. int main(int argc, char * argv[])
  16. {
  17. Test t;
  18. t.test();
  19. return 0;
  20. }


En línea

Estoy aprendiendo español, y tu estas aprendiendo programación
dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: oerador de ambito :: o doble dos puntos
« Respuesta #2 en: 10 Octubre 2011, 03:43 am »

hay gracias amigo, si es tal cual como en el ejemplo, ya entendi para que es...
pero mi pregunta seria la siguiente, porque no se le especifica el espacio de nombres o  clase a la que pertenece, por ejemplo si fuera de la libreria estandar seria "std::xxxxx" pero en estos casos que te mostre a modo de ejemplo, solo usa el "::" , y otra cosa, en algunas clases como la del ejemplo 2, no tenes un metodo llamado "EnterCriticalSection", y sin embargo en otro metodo de esa clase se llama a esa api usando el "::", por eso, algunas dudas me quedaron ojala me las puedas aclarar. pero lo que mostraste lo entendi bien  ;)

En línea

LearningSpanishProgrammer

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: oerador de ambito :: o doble dos puntos
« Respuesta #3 en: 10 Octubre 2011, 03:59 am »

Su duda es MUY buena, me gusta mucho cuando las personas tienen dudas tan buenas.

imagine que tu usa la biblioteca XX que usa EnterCriticalSection "as free function", pero tu tambien usas YY que  usa "myfunction::EnterCriticalSection" . Los dos funciones son globales, pero solo myfunction tienes un namespace.

Se tu hacer um codigo usando "using namespace myfunction". ¿Cómo podría llamar la "función global"? O entonces, por esto tambien, poderia  llamar, por inadvertencia, "myfunction::EnterCriticalSection" cuando en realidad querias "global EnterCriticalSection".   Usar :: es una buena pratica

Código
  1. #include <stdio.h>
  2.  
  3. namespace ps
  4. {
  5.  int printf(const char * p)
  6.  {
  7.  puts("ps::printf");
  8.  }
  9. }
  10.  
  11. int main(int argc, char * argv[])
  12. {
  13. ps::printf("ola");
  14. ::printf("ola");
  15. using namespace ps;
  16. printf("ola"); // Compilation error: which one?!
  17.        ::printf("ola"); // Okay!
  18. return 0;
  19. }
En línea

Estoy aprendiendo español, y tu estas aprendiendo programación
dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: oerador de ambito :: o doble dos puntos
« Respuesta #4 en: 10 Octubre 2011, 04:10 am »



si al parecer esa es la razon, nunca lo considere, pero si todo lo que dijiste parece tener sentido,  y ser la razon por la que se usa, en ese caso seria una buena practica sin duda el usar el "::".
si hay algun otro uso de este operador no dejes de contarmelo XD

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
perdida del ambito entre llamadas system()
PHP
tragantras 8 4,125 Último mensaje 30 Junio 2010, 01:12 am
por tragantras
Windows 7 sigue por detrás de XP en el ámbito empresarial aunque recorta ...
Noticias
wolfbcn 0 1,451 Último mensaje 23 Junio 2011, 01:30 am
por wolfbcn
no se declaro en este ambito [SOLUCIONADO]
Programación C/C++
anamnesis_92 3 8,993 Último mensaje 21 Enero 2012, 20:36 pm
por Littlehorse
La informática, expulsada del ámbito de las ingenierías « 1 2 »
Foro Libre
‭lipman 16 7,031 Último mensaje 13 Abril 2013, 19:35 pm
por vodka
10 Tipos de Programadores que Encontrarás en el Ámbito
Programación General
Graphixx 3 2,893 Último mensaje 14 Noviembre 2013, 14:29 pm
por xaps
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines