靜態成員函式
靜態成員函式被視為具有類別範圍。 相對於非靜態成員函式,這些函式沒有隱含的 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 函式。