静态成员函数被视为具有类范围。 与非静态成员函数不同,这些函数没有隐式 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。