Поделиться через


Статические функции-члены

Область статических функций-членов совпадает с областью класса. В отличие от нестатических функций-членов, эти функции не имеют неявного аргумента this; следовательно, напрямую они могут использовать только статические данные-члены, перечислители или вложенные типы. Доступ к статическим функциям-членам возможен без использования объекта соответствующего типа класса. Рассмотрим следующий пример.

Пример

// 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
}

Комментарии

В предыдущем коде класс StaticTest содержит статическую функцию-член count. Эта функция возвращает значения закрытого члена класса, но не обязательно связана с определенным объектом типа StaticTest.

Статические функции-члены класса имеют внешнюю компоновку. Эти функции не имеют указателей this. В результате на такие функции распространяются следующие ограничения:

  • У них отсутствует доступ к данным класса нестатических членов с помощью операторов отбора членов (. или –>).

  • Они не могут объявляться как virtual.

  • Они не могут иметь то же имя, что и нестатическая функция, имеющая те же типы аргументов.

    Примечание

    Левая сторона оператора отбора членов (. или –>), отбирающая статическую функцию-член, не проверяется.Это может быть важно, если используются побочные эффекты функции.Например, выражение SideEffects().CountOf() не вызывает функцию SideEffects.

См. также

Ссылки

Указатель this