static数据成员、static成员函数

static数据成员的引入:
不同对象之间共享访问,本质上是对该类型所有对象,只维持一份拷贝

与全局变量相比,优势:
1. 静态数据成员仍然是在类域名字空间,没用进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能
2. 可以实现信息隐藏,静态数据成员可以是private成员,全局变量不行

注意:
1. 静态数据成员必须在类定义外初始化,但const静态数据成员除外,const静态数据成员可以在类体中初始化
一般情况下:
1 //类体c1.h
2 class c1
3 {
4 public:
5 
6 private:
7    static int num;
8    static const  string name = "chio";
9 };

1 //类实现c1.cpp
2 #include "c1.h"
3 
4 int c1::num = 20;
  const string name ; //仍然需要在类体外定义
5 void c1::..
6 

2. 类成员函数(无论是static成员函数或非static成员函数)都可以直接访问static数据成员
3. 访问方式有两种:  object.static_var 或   classname::static_var
特殊性:
1. static数据成员的类型可以是其所属类,而非static数据成员类型只允许为该类的指针或引用
example:
1 class Bar
2 {
3 public
4     //
5 private:
6     static Bar mem1;//ok
7     Bar *mem2;//ok
8     Bar mem3; //error
9 };

2. 静态数据成员可以作为类成员函数的缺省参数,而非static成员不能。
分析:静态成员函数如果未初始化,系统自动会给它初始化为某个缺省值(如int初始化为0, 指针初始化为NULL等)。 所以一旦定义,其值已确定,可以作为类成员函数的缺省参数



static成员函数的引入:
如果某成员函数只访问static数据成员,而不访问任何其他的数据成员(非static),那么此成员函数就与哪个对象来调用无关。

1. 只在类体的函数声明前加static, 类体外函数定义不能指定关键字static
2. 静态成员函数没有this指针
3. 访问方式也有两种



posted @ 2007-06-07 00:33  中土  阅读(2604)  评论(0编辑  收藏  举报
©2005-2008 Suprasoft Inc., All right reserved.