Pregunta

¿Es posible acceder y acceder a miembros estáticos dentro de una clase sin crear primero una instancia de esa clase? Es decir, tratar a la clase como una especie de vertedero para los globales

James

¿Fue útil?

Solución

También puede llamar a un método estático a través de un puntero nulo. El siguiente código funcionará, pero no lo use :)

struct Foo
{
    static int boo() { return 2; }
};

int _tmain(int argc, _TCHAR* argv[])
{
    Foo* pFoo = NULL;
    int b = pFoo->boo(); // b will now have the value 2
    return 0;
}

Otros consejos

Sí, es precisamente lo que static significa para los miembros de la clase:

struct Foo {
    static int x;
};

int Foo::x;

int main() {
    Foo::x = 123;
}

Por otro lado, para eso están los espacios de nombres:

namespace toolbox
{
  void fun1();
  void fun2();
}

El único uso de clases de funciones estáticas es para clases de políticas.

En resumen, sí.

En general, se puede llamar a un miembro estático en cualquier lugar, simplemente trata el nombre de la clase como un espacio de nombres.

class Something
{
   static int a;
};

// Somewhere in the code
cout << Something::a;

Sí:

class mytoolbox
{
public:
  static void fun1()
  {
    //
  }

  static void fun2()
  {
    //
  }
  static int number = 0;
};
...
int main()
{
  mytoolbox::fun1();
  mytoolbox::number = 3;
  ...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top