C++ 类中的static 成员函数

简介
同静态成员变量一样,静态成员函数在类里面定义,作用域为整个类,所有类的对象共享静态成员函数

特征

由于没有传递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

原文地址:https://www.cnblogs.com/cdsidi/p/12638411.html