静态成员数据和静态成员函数

/*
含有静态数据成员的类在创建对象时不为静态数据成员分配存储空间,可以将静态数据成员看成一个全局变量,将其封装在某个类中有两个目的
(1)限制该变量的作用范围,例如,将其放在类的私有部分声明,则它只能有该类对象的函数成员直接访问
(2)将意义相关的全局变量和相关的操作物理地放在一起,可以增加程序的可读性和可维护性

静态成员函数
1)静态成员函数是同类的所有对象共享的资源,只有一个公用的副本,因此它不能直接访问非晶态的数据成员,必须要通过某个该类的对象才能访问,
一般的成员函数可以直接访问非静态的数据成员
2)在静态成员函数中访问的基本上是静态数据成员或者全局变量
3)类名::静态成员函数名
4)一个趔IDE静态成员函数于非静态成员函数不同,它不需要创建任何该类的对象就可以被调用,静态成员函数的使用虽然不针对某一个特定的对象,但在使用时系统
中最好已经存在该类的对象,否则无意义
5)静态成员函数不能使虚函数,若非静态成员函数和经台成员函数具有相同的名字很参数类型将是非法的
*/
#include<iostream>
using namespace std;
class Student {
  public:
   void Set(string str) {
   name=str;
   number++;
   }
   static int PrintNumber() {//静态成员函数
       cout<<number<<"total numbers"<<endl;
   }
   void Print() {
    cout<<name<<"->students are"<<number<<"numbers"<<endl;
   }
   private:
    static int number;//静态数据
    string name;
};
int Student::number=0;//静态数据初始化
int main() {
   Student s,s1;
   Student::PrintNumber();//调用静态成员函数
   s.Set("Smith");
   s.Print();
   Student::PrintNumber();
   s1.Set("jenny");
   s1.Print();
   s1.PrintNumber();
   return 0;
}

结果:

0total numbers
Smith->students are1numbers
1total numbers
jenny->students are2numbers
2total numbers

--------------------------------
Process exited after 0.2102 seconds with return va
请按任意键继续. . .

 

posted @ 2016-01-01 16:14  HYDhyd  阅读(419)  评论(0编辑  收藏  举报