🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一.静态数据成员 1. **概念** 声明为 `static` 的数据成员 2. 静态数据成员与类关联在一起,被所有该类产生的对象共享,它的空间是在所有对象之外单独开辟的。 3. 静态数据成员的生命期是静态生命期。 4. 静态数据成员只能在类体外进行初始化。 ```c++ struct Price { int base; static double rate; }; double Price::rate = 0.025; ``` 5. 静态数据成员可以被类名和对象名引用。 ```c++ Price p = {20}; cout<<p.rate;//OK cout<<Price::rate;//OK ``` ## 二.静态成员函数 1. **概念** 声明为 `static` 的成员函数。 2. 静态成员函数没有 **this** 指针,因此默认只能访问静态数据成员。如需访问非静态成员,需要手动传入该类的对象。 3. `static` 不是成员函数声明的一部分,因此同名同参同返回值的静态成员函数和非静态成员函数是一个函数。 4. 静态成员函数可以传递给普通函数指针。 ```c++ #include <iostream> #include <string> using namespace std; class Complex { public: static string name() { return "Complex"; } }; int main() { typedef string (*FPOINTER)(); FPOINTER fp = Complex::name;//将静态成员函数传递给普通函数指针 cout<<fp(); return 0; } ``` >[test] >Complex 5. 普通成员函数可以访问静态的数据成员和成员函数。