2015-02-23 184 views
0

這個問題的一個擴展:
Class method access to it's data members
將採取從質詢的是,每當一個類的方法被調用時,它隱含通過其幫助對象的地址它使用'this *'來訪問類的數據成員。類的靜態方法訪問的靜態數據成員

的跟進問題是:

  • 如何是類的靜態方法能夠訪問類的靜態數據成員?

參數保持不變。一個函數只能訪問堆棧中加載的局部變量。

  • 靜態數據成員或它們的地址是隱式加載到靜態函數堆棧上的嗎?

  • 如果不是,它是如何工作的?

+0

沒有「靜態函數堆棧」這樣的東西。類靜態成員只是全局變量,其名稱中包含「::」他們有一個由鏈接器分配的地址。 – 2015-02-23 06:22:17

回答

0

原因是因爲兩者都不綁定到該類的實例。

例如,

class test 
{ 
    public: 
    static int i=5; 
    static int getI(){return i;} 
}; 

您可以訪問i,如:

int a=test::i; 

或類似

int a=test::getI(); 

i被存儲在程序的全局數據部分。它不受限於一個對象,因此它對於創建的每個實例都是相同的。您可以訪問我,而無需創建class test的實例。 class test僅僅是這種情況下的命名空間。沒有記憶魔法。