静态成员的作用以及用法的总结

来源:互联网 发布:linux修改root密码命令 编辑:程序博客网 时间:2024/05/22 06:34
一、类的静态数据成员有什么用?

  类实现了数据和数据的操作封装在一起,每个类的对象都会分配好内存来保存自己的数据成员,但是往往某个类的众多对象需要一些数据共享,比如定义了Person类,实例化了person1,person2,person3,但是我现在想知道我到底实例化了多少个person对象,怎么办?一个想法是定义一个count数据,这个数据为这些person对象共享,每个person都可以访问该count数据成员,这就是类的静态数据成员的作用:静态成员是解决同一个类的不同对象之间数据和函数共享的问题。

  二、怎么定义一个静态数据成员

  用关键字 static 来定义,比如 static int count 。

  三、实例

  看如下代码:

PHP 代码:
class Point
{
public:
    
Point(int m=0int n=)
    {
         
this->;
         
this->n  ;
         
this->count ++ ;
    }
    ~
Point() { this->count -- ; }
    
int getX() { return this->;}
    
int getY() { return this->;}
    
void ShowCount() { cout << "The numbers of count are :" << this->count << endl;}
private:
    
int x ;
    
int y ;
    static 
int count ;     
}
int Point::count 
  count 就被定义为 静态成员变量,那么 count 就可以为所有的Point 对象所共享,通过对象名.ShowCount 来访问 count:

PHP 代码:
Point A(4,5) ;
A.ShowCount() ;  //  1 
Point B(A) ;
B.ShowCount()   // 2 
  count 为 静态成员,每个对象的创建和销毁都会影响到count 。

  四、静态数据成员需要注意的地方

  1. 静态数据成员不属于任何一个对象,它只属于类。

  2. 静态数据成员的初始化要在实例化对象之前,否则你要是用 类名::静态数据成员 来访问 (这个可以在没有实例化对象)输出错误结果。

  3. 一般静态成员不能在内联函数中访问。

五、 类的静态函数成员

  在上面的例子中,每个对象都与一个 ShowCount 的拷贝,可以与 类的静态数据成员一样,设为共享方式。这就需要定义为静态函数成员了。

  相关定义如下:
PHP 代码:
class Point
{
public: 
Pointint m int n ) { count++ ;}
PointPoint p) ;
~
Point() { count-- ;}
static 
void ShowCount() { cout << count << endl; }
private:
int x ;
int y ;
static 
int count ;

int Point::count // 注意初始化的方式 
  在如下代码中:
PHP 代码:
Point A(4,5) ;
A.ShowCount() ; // 通过对象名引用
Point:: ShowCount() // 通过类名来引用,推荐使用这个方式 
  需要注意的是,静态成员函数中不可以使用 this 指针,一般是用来访问 静态数据成员的,不做其他用途。(访问非静态成员需要通过参数传递对象名,通过对象名来访问)。
原创粉丝点击