c++学习笔记--类的static静态成员

来源:互联网 发布:日本创新 知乎 编辑:程序博客网 时间:2024/05/01 23:18

static静态成员
       
      1.static静态数据成员可以被该类所有对象所共享,但其不是每个对象中的成员。
      2.static静态成员在类中声明之后,还必须要在类的外面定义一次,而且还要用
           类名进行限定修饰。
          class Account{
               public:
                    static double rate;
            }
           double Account::rate=0.12;//必须在类的定义之外再定义
      3.静态数据成员的定义不应该放在类声明的头文件中,例如上例中class Account
         头文件中,则静态成员的定义应该这样写:
         #include“account.h”
        double Account::rate=0.12;//在包含类的费内联成员函数定义的文件中
      4.一般的静态数据成员的定义都应放在类的定义之外,但是如果静态数据成员是整型
         const static成员,则通常在定义时就初始化(初始化时必须要是一个常量表达式)。
         class Account {
         public :
                  const static int namesize=16;
                  const static string name[namesize];
         }
        const int Account::namesize;//仍然需要在类的外面定义,只是初始化放在类里面
        const string Account::name[namesize]="马化腾";
        本例中,在定义name时直接用了namesize,而并没有在namesize之前用Account限定
        说明他是Account的成员,是因为在定义name时,前面有了Account修饰了,这样name
       的作用域已经在Account类里面了,所以他可以直接调用namesize成员。
      5.静态数据成员的访问除了和一般数据成员的访问相同外,还支持用类名限定修饰的名字来
         直接访问
         if(Account::namesize==16)
         {。。。。。。}
      6.静态数据成员的类型可以是所属的类类型,而非static成员则只能是自身类的指针或引用!
         class Bar{
         public:
                   static Bar mem1;//ok
                  Bar *mem2;// ok
                  Bar mem3;  //error
           };
       7.static数据成员可以作为类成员函数的缺省实参,而非static成员则不可以。
           class Screen{
            public:
                    Screen&clear(char=bkground);
            private:
                    static const char bkground='#';
            }
           非static数据成员不能用作默认实参,因为他的值不能独立与所属的对象而使用。
           使用非static数据成员作默认实参,将无法提供对象以获取该成员的值,因而是错误的。
        8.静态成员函数  的声明除了在类体中的函数声明前加上关键字static, 以及不能声明为
          const 或volatile之外,与非静态成员函数相同。出现在类体外的函数定义不能指定关
          键字static。
        9.静态成员函数没有this指针,任何显式或隐式的调用this指针都是错误的,例如一个static
          成员函数中调用了一个非static数据成员都是错误的,因为在调用非static时会隐式的调用
          当前对象的this指针,而这个是不允许的。