2013-02-27 193 views
0

我已閱讀了關於此問題的一些帖子,但我不確定某件事。當我有一個靜態的方法,我把它叫做沒有設置,它屬於像之類的任何對象:構造函數和靜態函數

類:

代碼:

class Fruit { 
    static int colour; 
    Fruit(); 
    static int getColour(); 
    static void setColour(); 
    virtual ~Fruit(); 
} 

的調用函數:

代碼:

Fruit:getcolour(); 

執行靜態函數:

int Fruit::setColour() { 
    return colour; 
} 

構造函數是否被調用以運行靜態函數?因此,如果我有構造函數做類似於對象的初始化(seting構造函數調用setColour())的東西,它會運行之前函數getColour

回答

2

不,構造函數不會被調用,也不需要調用,因爲Fruit::color必須定義爲才能編譯。

所以,這不是完整的代碼。實現文件具有類似

int Fruit::colour = 42; 

這是什麼getcolour將返回,除非你改變的值事先。

1

假設static成員的定義(沒有你的程序將無法編譯)作爲你忘了在OP提一個細節,

請問構造函數被調用,以運行靜態功能?

不,它沒有。

static方法不上的類的特定實例,以使實例操作(,因此調用構造器)不需要調用static方法。
另外,static方法只能對static類成員進行操作,除非對象實例明確傳遞給它。鑑於static成員是每個類而不是每個實例,所以構造函數不會被調用是有意義的。

+1

+1 - 正確解釋i.m.h.o的唯一答案.. – JimmyB 2013-03-01 14:46:55

0

將一個靜態成員函數或一個靜態成員變量想象成一個像全局一樣的東西。如果你需要一個靜態函數來訪問成員信息,你需要創建一個全局實例或者使用其中一個單例模式(如果你使用多線程模式,請小心懶惰單例模式)。