有的时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联。
声明静态成员
我们通过在成员的声明之前加上关键字static使得其与类关联在一起,和其他成员一样,静态成员可以使public得或private的。静态数据成员的类型可以使常量、引用、指针、类类型等。
举个例子,我们定义一个类,用它表示银行的账户记录:
1 class Account{ 2 3 public: 4 void calculate() {amount+=amount*interestRate;} 5 static double rate() {return interestRate;} 6 static void rate(double); 7 private: 8 std::string owner; 9 double amount; 10 static double interestRate; 11 static double initRate(); 12 };
类的静态成员存在于任何对象之外,对象中不包含任何与静态数据成员有关的数据。因此,每个Account对象将包含两个数据成员:owner和amount。只存在一个interestRate对象而且它被所有所有Account对象共享。
类似的,静态成员函数也不与任何对象绑定在一起,它们不包含this指针。作为结果,静态成员函数不能声明成const的,而且我们也不能在static函数体内使用this指针,这一限制既适用于this的显式使用,也对调用非静态成员的隐式使用有效。