簡介
同靜態成員變量一樣,靜態成員函數在類里面定義,作用域為整個類,所有類的對象共享靜態成員函數
特征
由於沒有傳遞this 指針,靜態成員函數只能訪問static 成員 不能訪問非static 成員
用法
1 class ex{ 2 private: 3 int _non_static; 4 static int _static; 5 public: 6 int h(){ 7 return _non_static; 8 } 9 static int g(){ 10 //_non_static=0; (不正確) 11 //靜態成員函數不能訪問非靜態成員變量 12 return _static; 13 } 14 static int f(){ 15 //h(); (不正確) 16 //靜態成員函數不能訪問非靜態成員函數 17 return g(); 18 } 19 }; 20 int ex::_static= 0;//static 成員變量可以在類外改變 21 int main(){ 22 ex var; 23 ex* pointer=&var; 24 var.f();//方式一:點運算符 25 pointer->f();//方式二:箭頭運算符 26 ex::f();//方式三: 類名:靜態成員函數名 27 return 0; 28 }
這里要注意:static函數在類內聲明、類外定義時,類內要寫明static 類外則不能加static關鍵字,如下,會報錯
1 class ex{ 2 public: 3 static int f(); 4 }; 5 /*錯誤的示范 6 static int ex::f(){ 7 return 0; 8 } 9 */ 10 //應該這樣寫 11 int ex::f(){ 12 return 0; 13 } 14 int main(){ 15 return 0; 16 }
因為在類體外聲明static 會將成員函數作用域擴大到文件,比類的域要大,所以會報錯
[Error] cannot declare member function ... to have static linkage