c++学习(一) (静态类成员)

手里拿着c++primer 3,突然翻到静态类成员那节,就仔细看了下,有种想记下来的冲动

class ClassName {

    public:

     // method

  private:

        static valueType value;

// ......

};

上面定义了类的静态成员value,类的静态成员有一下特性:

1. 对于所有的类对象要用到的数据,为了提高效率和节省存储空间,可以把这个变量定义为static型的,因为static型变量在所有的类对象种只有一个拷贝

2. static的定义放在类体的外面(跟类的成员函数有点相似),一般不放在.h 文件种,因为只能对static型变量只能进行一次定义,如果放在.h文件种,当程序种引用该.h文件时,将出现重复定义的编译错误。 有一个特殊情况,当static 限制的是const int型变量时,可以在类体种定义,这时候该变量相当于常量表达式,若果想要用这个变量,还要在类外对变量进行声明;eg:

class  A {

public:

   // ....

private:

     static const int  a = 100;

    static const char b[ a] ;

};

const int A::a ;  // it is necessary

const char A::b[a] = "yes";

3. static变量可以被类成员函数直接访问

4. static 数据成员的类型可以是其所属的类类型,非static类型只能被声明为该类对象的指针和引用eg:

class A {

public :  // ...

private:

   static  A     mem1;

    A * mem2;

  A &  mem3;

};

4. static 数据成员可以被声明为任意类型。

5。static 数据成员可以类成员函数的缺省实体,但是非static不行;

eg :

  extern int   var ;

class Foo  {

private:

     int    var ;

   static int    stcvar;

public:

  int    mem1 ( int = var) ;   // 错误,被解析为非static 的Foo::var,没有相关的类对象

  int     mem2 (int = stcvar);  // ok,被解析为static的 Foo::stcvar,无需相关的类对象

int   mem3 (int = ::var);  // ok, int   var的 全局实例

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值