一,static类成员的优点(区别于全局对象)

①static在类的作用域中,可避免同名全局对象冲突.

②可实施封装,不容易被外部简单更改其值.

③通过引用方式(区域符::)可清晰表明是与特定类关联的.

 

二,定义static成员

①每个类对象都没有与static数据成员相对应,这个static成员是由整个类类型的全体对象共享,

   同一个类的所有对象共用同一个static成员. 

②遵循正常的公有/私有访问规则.

static 类型 name;

static 类型 name();

 

三,使用类的static成员

①通过 Classobj.member 使用(类对象.成员)

②通过 Classp->menber 使用(类指针->成员)

③通过 Class::member 使用(类::成员)

 

四,static成员函数

外部定义static成员函数时,无须重复指定static保留字,保留字只出现在类定义体内声明处:

  class A{  

  public:

   //public members

  private:

    static int fun();

    //else private members

  };

int A::fun()   { .....; }

(因为 statci 成员是类的组成部分而不是任何对象的组成部分, 所以 static 函数木有 this 指针)

 

五,static数据成员

※在类的定义体外部进行定义.static数据成员不能通过构造函数进行初始化,应在定义变量时进行初始化.

   先指定类型,后接成员的完全限定名.(随后可没有限定地直接使用类的数据成员或成员函数)

   类型 类::static_mem = value;(value 可以为类的数据成员或成员函数)

 

六,特殊的整型 const static 成员

 在类的定义体中进行初始化,在类的定义体外进行定义

(ps:类定义时内存并没有分配空间给static成员,需对static成员进行定义才能使用static成员)

 类定义体中:

  static const int p = 30;

 类定义体外:

  const int Class::p    ;   //不必再制定其初始值

 

七,static成员不是类对象的组成部分

①static数据成员可以是该成员所属的类类型.非static成员被限定为自身类型的指针或引用

②static数据成员可用作默认实参(static成员的值可独立于类对象使用):

  class Bar{

   public:

     Bar& clear(char = bkground);//默认clear()函数的实参为char类型的bkground

   private:

    static const char bkground = '#';

    static Bar mem1;        //ok.

    Bar *mem2;              //ok

    Bar   mem3;              //error,不能定义自身类型对象作为数据成员

};

posted on 2012-07-17 21:10  菠萝_Ho  阅读(206)  评论(0编辑  收藏  举报