C++的静态成员是和类关联的,它属于某个类,但是不属于某个特定的对象。静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。
但是可以通过对象调用静态成员函数,虽然我们一般不会这么做:
1 class Point 2 { 3 public: 4 void init() 5 { 6 } 7 static void output() 8 { 9 } 10 }; 11 12 void main() 13 { 14 Point pt; 15 pt.init(); //OK 16 pt.output(); //OK 17 }
在类外实现时不加static关键字,只有在类内声明时才加static。
我们一般会用类名直接调用静态成员函数:
1 Point::output(); //OK 这是更常见的调用方式
静态成员函数中不能调用非静态成员。因为静态成员函数的作用就是为了处理静态成员。而静态成员和静态成员函数是没有this指针的,但是非静态成员是有this指针的,所以static member function不能调用非静态成员。
为什么静态成员和静态成员函数没有this指针?
this指针的值是当前被调用的成员函数所在的对象的起始地址,而静态成员只属于类,不属于对象,也就没有this指针了。