2011-10-13 70 views
-3

正常函數(而不是靜態函數)是否只有一個C++類的副本,這意味着所有對象都指向同一副本。如果是這樣,正常功能和靜態功能有什麼區別。另外,我的老師說我們不能使用「(object_name)。(func_name)」表示法調用類的靜態函數,但必須使用「class_name::(func_name)」調用它,而我明白這是邏輯要做的事情,但就語言而言,我不允許使用(object_name)。(func_name)符號來調用靜態函數嗎?最後,我不能在類的構造函數或該類的任何其他函數內初始化類的靜態數據成員,但必須從類外部進行初始化?C++類的函數對於所有對象只有一個副本嗎?

+0

我真的推薦一本好書。它不需要是C++特定的。首先你需要了解面向對象的原則。例如。什麼是類,什麼是對象。除此之外。 -1爲壞的問題。你應該真的學會如何發表可讀的問題。 – mkaes

+0

@mkaes,以及爵士,讓你覺得我不明白麪向對象編程的原理,例如。什麼是課堂,什麼是對象。就語言而言,我接受它是寫得很糟糕,因爲我很匆忙 – SegFault

回答

4

如果只有一個副本,表示所有功能在內存中具有相同的位置,那麼是的,您是對的。區別在於靜態函數不需要爲了被調用而實例化對象。這也意味着你不能訪問該類的其他非靜態成員。

至於初始化,你不能在構造函數中完成它,因爲調用一個可以訪問靜態成員的靜態函數將需要事先調用構造函數。沒有辦法保證。你可以改變構造函數中的靜態,但它必須在別處初始化。

想想這樣的場景:

class A 
{ 
static int x; 
public: 
    A() 
    { 
     x = 3; 
    } 
    static int getX() 
    { 
     return x; 
    } 
} 

int main() 
{ 
    A::getX(); //what would x be here? It hasn't been initialized since A() was not called. 
} 

至於調用函數(對象)(功能),而不是(類)::(功能),我相信你被允許這樣做,但你爲什麼?

相關問題