elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:34  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 823 veces)
dewolo

Desconectado Desconectado

Mensajes: 83


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

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 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 »

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

Código
  struct Test
 {
    int printf(const char *)
    {
    puts("Test::printf");
    }
 
    void test()
    {
        printf("Ola!"); // class printf
        ::printf("Ola"); // global (stdio.h)
    }
 };
 
int main(int argc, char * argv[])
{
Test t;
t.test();
return 0;
}


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 »

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 »

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
#include <stdio.h>
 
namespace ps
{
 int printf(const char * p)
 {
 puts("ps::printf");
 }
}
 
int main(int argc, char * argv[])
{
ps::printf("ola");
::printf("ola");
using namespace ps;
printf("ola"); // Compilation error: which one?!
       ::printf("ola"); // Okay!
return 0;
}
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 »



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
Uso del correo electrónico en el ámbito laboral
Noticias
wolfbcn 0 518 Último mensaje 7 Diciembre 2004, 07:37
por wolfbcn
Doble problemas os pido doble ayuda,please.
GNU/Linux
stradivariuss 8 894 Último mensaje 30 Agosto 2008, 21:50
por oPen syLar
Licencias de móvil 4G de ámbito autonómico
Noticias
Axus 0 230 Último mensaje 7 Septiembre 2008, 16:52
por Axus
perdida del ambito entre llamadas system()
PHP
tragantras 8 1,263 Último mensaje 30 Junio 2010, 01:12
por tragantras
no se declaro en este ambito [SOLUCIONADO]
Programación C/C++
anamnesis_92 3 389 Último mensaje 21 Enero 2012, 20:36
por Littlehorse
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines