Funciones miembro estáticas

Se considera que las funciones miembro estáticas tienen ámbito de clase. A diferencia delas funciones miembro no estáticas, estas funciones no tienen ningún argumento this implícito; por consiguiente, solo pueden utilizar los miembros de datos estáticos, los enumeradores o los tipos anidados directamente. Se puede tener acceso a las funciones miembro estáticas sin utilizar un objeto del tipo de clase correspondiente. Considere este ejemplo:

Ejemplo

// static_member_functions.cpp
#include <stdio.h>

class StaticTest
{
private:
    static int x;
public:
    static int count()
    {
        return x;
    }
};

int StaticTest::x = 9;

int main()
{
    printf_s("%d\n", StaticTest::count());  // 9
}

Comentarios

En el código anterior, la clase StaticTest contiene la función miembro estática count. Esta función devuelve el valor del miembro de clase privado, pero no se asocia necesariamente con un objeto determinado de tipo StaticTest.

Las funciones miembro estáticas tienen vinculación externa. Estas funciones no tienen punteros this. En consecuencia, a estas funciones se les aplican las siguientes restricciones:

  • No pueden tener acceso a los datos de miembro de clase no estáticos mediante los operadores de selección de miembros (. o –>).

  • No se pueden declarar como virtual.

  • No pueden tener el mismo nombre que una función no estática que tiene los mismos tipos de argumento.

    Nota

    No se evalúa el lado izquierdo de un operador de selección de miembros (. o –>) que selecciona una función miembro estática.Esto es importante si la función se utiliza por sus efectos secundarios.Por ejemplo, la expresión SideEffects().CountOf() no llama a la función SideEffects.

Vea también

Referencia

this (Puntero)