(2) 静态成员函数主要用来访问全局变量或同一个类中的静态数据成员。特别是,当它与静态数据成员一起使用时,达到了对同一个类中对象之间共享数据进行维护的目的。
(3) 私有静态成员函数不能被类外部函数和对象访问。
(4) 使用静态成员函数的一个原因是,可以用它在建立任何对象之前处理静态数据成员。这是普通成员函数不能实现的。
(5) 静态成员函数中没有指针this,所以静态成员函数不访问类中的非静态数据成员,若确实需要则只能通过对象名(作为参数)访问。
【例3.19】 静态成员函数访问非静态数据成员 #include<iostream.h> class small_cat { public: small_cat(double w) { weight=w; total_weight+=w; total_number++; } static void display(small_cat& w)//访问非静态成员 { cout<<"The small_cat weights "<<w.weight<<" kg\n";} static void total_disp() //访问静态成员 { cout<<total_number<<" small_cat total_weight "; cout<<total_weight<<"kg "<<endl; } private: double weight; static double total_weight; static double total_number; }; double small_cat∷total_weight=0; double small_cat∷total_number=0; int main() { small_cat w1(0.9), w2(0.8), w3(0.7); small_cat∷display(w1); small_cat∷display(w2); small_cat∷display(w3); small_cat∷total_disp(); return 0; } 通过普通指针访问静态成员 例3.20 通过指针访问类的静态数据成员 #include<iostream.h> class myclass { public: myclass() // 构造函数,每定义一个对象, 静态数据成员i加1 { ++i; } static int i; // 声明静态数据成员i }; int myclass::i=0; // 静态数据成员i初始化,不必在前面加static main() { int *count=&myclass::i; myclass ob1,ob2,ob3,ob4; cout<<“ myclass::i= ”<<*count<<endl; return 0; } 【例3.21】 通过指针访问类的静态成员函数 #include<iostream.h> class myclass { public: myclass() { ++i; } static int geti() { return i; } private: static int i; }; int myclass::i=0; main() { int (*get)()=myclass::geti; myclass ob1,ob2,ob3; cout<<"myclass∷i="<<(*get)()<<endl; return 0; }