class A{
static void foo();
}
void A::foo(){
....
}
为什么定义的时候不能写static了?
伊谢尔伦2017-04-17 11:49:53
設想如果你的class A裡有兩個foo()函數:
class A{
static void foo();
void foo();
};
這樣為了區分它們,你在定義的時候才需要寫static:
static void A::foo(){
//....
}
void A::foo(){
//....
}
然而C++編譯器在區分函數時不把有無static關鍵字考慮在內,而只看函數名,返回類型和參數表,void foo();和static void foo();被視為重複聲明,是被禁止的,也就是說一個類別裡面只能有一個void foo();函數,不管它是static還是非static。為什麼呢?
再設想class A有另一個函數void bar();定義如下:
void A::bar(){
//....
foo();
//....
}
這種寫法差不多算是一種慣例吧,在函數bar()內呼叫函數foo()的時候是直接寫foo();而不會寫上函數宣告時使用的static,const等關鍵字,這樣如果你有void foo()還有一個staic void foo(),編譯器是無法區分你呼叫的是哪個foo()的;
既然只能有一個void foo(),那麼你在定義它的時候也就沒必要再寫一次static了,編譯器已經知道它是哪個函數了。
ringa_lee2017-04-17 11:49:53
static用於修飾成員變數或成員函數時,只在宣告時在類別的內部宣告即可,實例化或定義的時候不用加static。
class A{
static int n ;
};
int A::n = 123;