回覆列表
  • 1 # 使用者3926722064098

    class Foo

    {

    public:

    static int a;

    stataic void func();

    }

    靜態資料成員和函式都是在宣告前加static

    靜態成員必須要在類外初始化,無法在建構函式內初始化。新標準的C++也允許在生命靜態資料成員的是後直接加等於號進行初始化,但是大部分編譯器不支援。所以最保險的辦法就是在類定義的外面再寫:

    int Foo::a = 0;

    注意,這時候不需要再static了。

    函式則很普通成員函式的宣告以及實現沒區別,唯一要注意的是,靜態函式是沒有this指標的,因此不能訪問任何非靜態的其他成員函式或成員變數,如果要訪問需要傳遞this指標進去,比如

    class Foo

    {

    public:

    int a;

    static void func(Foo* ptrFoo)

    {

    a = 0; // 錯誤!!!a不是靜態變數,無法訪問!

    ptrFoo->a= 0; //正確。

    }

    void test()

    {

    // 非靜態成員函式呼叫靜態成員函式可以傳遞this指標,讓靜態成員函式透過他來訪問

    // 其他成員函式和成員變數。

    Foo::func(this);

    }

    }

  • 中秋節和大豐收的關聯?
  • 改款後的18國產“霸道”,按照目前的評論,就是一輛“安全性極差”的車,是這樣嗎?