下面用一个简单的程序加以理解
#include <iostream> #include <string> using namespace std; class Test { public: static int j; static void init();//init定义为static 或非static都可以修改static成员i的值 static int revise_i(int x); int get_i(); //由于没有this指针,static成员函数不能反问对象的非static成员,用static输出k是非法的 private: static int i; int k; const static int r = 1; //只有const static 成员在类定义时初始化 //若将上面的i直接初始化,编译时报错 }; //外部定义时不能再标示static int Test::i=0; //very important:外部定义(正好一次),之后i只能通过init修改 int Test::j=5; //j为public,之后可以直接访问和修改 void Test::init() { i=10; } int Test::get_i() { return i; } int Test::revise_i(int x) { i = x; return i; } int main() { Test obj; cout << obj.get_i() << endl; //通过 obj.init(); //私有的静态成员只能通过类的静态成员函数进行修改 cout << obj.get_i() << endl; cout << Test::j << endl; obj.j = 15; //公有的静态成员可以直接进行修改,访问方式可以obj.j或者Test::j Test::revise_i(555); cout << "after revise_i, i = " << obj.get_i() << endl; cout << Test::j << endl; system("pause"); return 0; }