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