2015-08-29 159 views
1

我知道如何訪問靜態成員方法靜態成員變量 - 這些是兩種方式我通常使用(非常簡化):顯式訪問靜態成員變量在靜態成員方法 - 在C++

class S{ 
    private: 
     static const int testValue = 5; 
    public: 
     static int getTestValue0(){ 
      return testValue; 
     } 
     static int getTestValue1(){ 
      return S::testValue; 
     } 
}; 

(工作實施例on:http://ideone.com/VHCSbh

我的問題是:有沒有更明確的方式如何訪問靜態成員變量比ClassName::staticMemberVar

有什麼樣self::在C++?

...只是我在尋找類似this用於引用靜態成員。

+3

_「在C++中是否有類似'self ::'的東西?」_沒有。儘管你可以爲self提供一個本地typedef類。 –

+1

http://stackoverflow.com/questions/21143835/can-i-implement-an-autonomous-self-member-type-in​​-c – LogicStuff

+0

@πάνταῥεῖ嗯,我想我只能和類名,然後...謝謝:) –

回答

3

有什麼樣self::在C++?

沒有沒有這樣的功能,但你可以使用一類局部typedef

class MyClass { 
    typedef MyClass self; 
    static int testValue; 
    static int getTestValue1(){ 
     return self::testValue; 
    } 
}; 

見工作demo

+0

那麼這真的只有LOCAL typedef嗎? (我可以在一個應用程序中使用更多的靜態類?) –

+0

@ jave.web是的,它甚至'private' –

+0

是的,我知道它是私有的,因爲沒有「祕密級」的定義:)我只是想確認一個類的'self ::'甚至不會嘗試訪問另一個類的'self ::'。 :) –

0

沒有支持使用非類名以外的東西。你需要實現它。

靜態函數成員:通過聲明一個函數成員爲靜態,使得它獨立於任何特定的類對象。即使存在 無類的對象靜態 成員函數可以調用和靜態函數僅使用類名和 範圍解析操作符::訪問。

閱讀細節click here

+1

_「沒有支持使用類名以外的東西。」_證明是錯誤的。 –

+0

使用typedef是一個很好的技巧,仍然是一個實現。 – umut