C++学习之:类与static(静态数据成员、静态成员函数、静态常量成员)

1.静态数据成员

整个类所有对象共享的数据,方法是在数据成员前加上static关键字

class SavingAccount//类的定义
{
    char  name[20]; //存户姓名
    char  addr[60]; //存户地址
    double  total;      //存款额
     static double  rate;    //利率
    …
}

类的定义只是给出了对象构成的说明,真正的存储空间是在对象定义时分配的。系统为对象分配空间时,并不再为静态数据成员分配空间。
静态数据成员的定义一般出现在类的实现文件中。比如在类SavingAccount的实现文件中,这样定义:

double SavingAccount::rate=0.05;

注意:
1.静态数据成员不属于对象的一部分,而是类的一部分;
2.静态数据成员的初始化不能放在类的构造函数中;
3.类定义并不分配空间,空间是在定义对象时分配,类的静态数据成员拥有一块单独的存储区,而不管创建了多少个该类的对象。所有这些对象的静态数据成员都共享这块空间。.但静态数据成员属于类,因此定义对象时并不为静态成员分配空间。
4.可以通过作用域操作符从类直接调用。如: SavingAccount::rate ,它似乎又是对象的一部分,因此又可以从对象引用它。如有个SavingAccount类的对象obj,则可以用:obj.rate.由于是整个类共享的,因此不管用哪种调用方式,得到的值都是相同的 。

2.静态成员函数

静态的成员函数是为类的全体对象服务,而不是为某个类的特殊对象服务。静态成员函数不需要借助任何对象就可以被调用,所以编译器不会为它暗加一个this指针。因此,静态成员函数无法处理类中的非静态成员变量
静态成员函数的声明只需要在类定义中的函数原型前加上保留词static。 访问方式:

类名::静态成员函数名();
对象名.静态成员函数名()

定义静态成员函数的主要目的是访问静态的数据成员,不能访问一般的数据成员。静态成员函数可定义为内嵌的,也可在类外定义。在类外定义时,不用static。

3.静态常量成员

整个类的所有对象的共享常量。声明:

static const  类型  数据成员名 = 常量表达式; 

注意const数据成员和static const数据成员的区别
常量数据成员属于各个对象,不同对象的常量数据成员的值可以不同,静态常量数据成员是属于整个类,不同对象的的同一个静态常量数据成员值在一样的。
静态常量数据成员可以并且必须在类定义时初始化。

class sample {
      static const int SIZE = 10;
      int storage[SIZE];
      …
};

猜你喜欢

转载自blog.csdn.net/wu_qz/article/details/80419383