Статические функции-члены
Область статических функций-членов совпадает с областью класса. В отличие от нестатических функций-членов, эти функции не имеют неявного аргумента 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.