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