静态数据成员和静态成员函数
静态成员函数如何初始化
#include <iostream> using namespace std; class Test { private: static int statica; int b; public: // Test(): statica(1) {}; //错误!static数据成员不能通过初始化列表初始化。 Test(): b(1) {statica = 1;}; //正确。 }; int main(void) { return 0; }
#include <iostream> using namespace std; class Test { private: static int statica; int b; }; int Test::statica = 1; //static成员的一般初始化方法。 int main(void) { return 0; }
如何访问静态数据成员
静态数据成员是类的数据成员,但不是对象的组成部分。那么在没定义任何对象的情况下,如何读取静态成员的初始值呢?
(也许会想到用 类名::静态数据成员,但是如果该静态数据成员是private的,那么不能这样访问!)
答案是通过静态成员函数。
静态成员函数不含this指针,因此不能直接访问类的非静态数据成员!(可间接通过参数传递对象名访问)
补充:静态数据成员和静态成员函数可以通过类名访问,也可以通过对象访问。
如下例子:
#include <iostream> using namespace std; class Test { private: static int statica; public: static int getStatica() //通过静态成员函数访问静态数据成员。 { return statica; } }; int Test::statica = 1;
int main(void) { cout << Test::getStatica(); return 0; }
特例static const
static const 类型的成员可以在类的定义体中初始化。
#include <iostream> using namespace std; class Test { private: const static int consta = 1; }; int main(void) { return 0; }